Как определить однонаправленное отношение OneToMany в JPA
У меня есть следующая проблема с отображением сущностей в JPA. У меня есть две сущности, первая - это "Уточняющий запрос", а вторая - "Текст", представляющий переводы для сущностей. Теперь мне нужно привязать Lookup к тексту, но я не хочу, чтобы текст имел ссылку на Lookup. Чтобы сделать это более сложным, Text не использует свой первичный ключ в этом отношении, но метакод, определенный в TXTHEAD_CODE
колонка.
Lookup.java
@Entity
@Table(name = "DATREG")
public class Lookup implements PersistableEntity {
@Id
@Column(name = "DATREG_META_CODE")
private String metaCode;
@OneToMany
@JoinTable(name="TXT",
joinColumns=@JoinColumn(name="DATREG_META_CODE", referencedColumnName="TXTHEAD_CODE"),
inverseJoinColumns=@JoinColumn(name="DATREG_META_CODE"))
private List<Text> text;
Text.java
@Entity
@Table(name = "TXT")
public class Text {
@Id
@Column(name = "TXT_ID")
private Long id;
@Column(name = "TXTHEAD_CODE")
private String code;
Так что я попробовал это (и несколько других вариантов), но безрезультатно. Я также не могу создать таблицу соединений в БД и не хочу привязывать Lookup к моему классу Text. Так может кто-нибудь сказать мне, если есть какой-то другой способ?
1 ответ
Моя библия для работы с JPA - это вики-книга Java Persistence. Есть раздел по однонаправленнымOneToMany
который объясняет, как сделать это с @JoinColumn
аннотаций. В вашем случае, я думаю, вы захотите:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;
Я использовал Set
а не List
потому что сами данные не упорядочены.
Выше используется дефолт referencedColumnName
В отличие от примера в викибук. Если это не сработает, попробуйте явно:
@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;