Составной первичный ключ с не примитивными атрибутами

#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: