Встраиваемый объект с атрибутом @OneToMany
Скажем, у меня есть следующие сущности:
@Entity
public class A {
@Id
@GeneratedValue
private Long id;
@Embedded
private B b;
//getters and setters
}
@Embeddable
public class B {
@OneToMany
private List<C> cList;
//getters and setters
}
@Entity
public class C {
@Id
@GeneratedValue
private Long id;
//other fields, getters and setters
}
Используя функцию автоматической генерации с помощью Hibernate
, я получаю дополнительную таблицу, которая содержит сопоставления между A
и C
. Но я хотел бы реализовать отношение "один ко многим", добавив A
id в C
(например, без дополнительной таблицы).
Возможно ли это? Если да, какие аннотации следует использовать для создания такого сопоставления?
Ответы
Ответ 1
В общем, это возможно с аннотацией @JoinColumn. Он также работает с вложениями.
@OneToMany
@JoinColumn(name="A_ID")
private List<C> cList;
Если вас не устраивает имя A_ID для столбца, указанного в embeddable, вы можете переопределить имя столбца в сущности A:
@AssociationOverride(name= "cList",
joinColumns = @JoinColumn(name="SOME_NAME_FOR_JOIN_COLUMN_IN_TABLE_C"))
@Embedded
private B b;