#java #hibernate #jakarta-ee #composite-primary-key
#java #спящий режим #джакарта-ee #составной первичный ключ
Вопрос:
Я новичок в Java и спящем режиме. У меня проблема с составным ключом. Я пытаюсь сделать что-то подобное:
@Entity
class A {
@Id
int id;
}
@Entity
class B {
@Id
int id;
}
@Entity
class C {
@EmbeddedId
C_PK c_pk;
}
@Embeddable
class C_PK {
A a;
B b;
}
Когда я выполняю
...
session.save(c);
...
Затем генерируется исключение, что типы A и B не могут быть вставлены в базу данных. Можно ли каким-то образом указать hibernate не сохранять объект A, а только идентификатор A? Является ли мой подход абсолютно неправильным и должен ли я просто использовать примитивные типы данных в классе C_PK?
Ответ №1:
Вы должны поместить @ManyToOne
(или OneToOne
) со столбцами объединения в ссылки A и B в C_PK.
@Embeddable
class C_PK {
@ManyToOne
A a;
@ManyToOne
B b;
}
Комментарии:
1. Пожалуйста, прочитайте раздел 2.2.3.2 — docs.jboss.org/hibernate/annotations/3.5/reference/en /. … «Хотя Hibernate не поддерживается в JPA, он позволяет вам размещать вашу ассоциацию непосредственно во встроенном компоненте id (вместо того, чтобы использовать аннотацию @MapsId)».
2. Извините, я был неправ, это действительно выглядело неуместно. Я отменю свой несправедливый голос, как только вы отредактируете ответ.
3.
org.springframework.beans.ConversionNotSupportedException: