Как определить однонаправленные отношения OneToMany в JPA

У меня есть следующая проблема с отображением сущности в JPA. У меня есть два объекта, первый - Lookup, а второй - Text, который представляет переводы для сущностей. Теперь мне нужно связать Поиск по тексту, но я не хочу, чтобы в тексте была ссылка на Lookup. Чтобы сделать это более сложным, текст не использует свой первичный ключ в этой связи, а метакод, определенный в столбце 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", 
            [email protected](name="DATREG_META_CODE", referencedColumnName="TXTHEAD_CODE"),
            [email protected](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;

Итак, я пробовал это (и несколько других вариантов), но без результата. Я также не могу создать таблицу соединений в БД, и мне не нужен связанный Поиск в моем классе Text. Так может ли кто-нибудь сказать мне, есть ли другой способ?

Ответ 1

Моя библия для работы JPA - это Java Persistence wikibook. Он имеет раздел для однонаправленного OneToMany, в котором объясняется, как это сделать с помощью аннотации @JoinColumn. В вашем случае, я думаю, вы бы хотели:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE")
private Set<Text> text;

Я использовал Set, а не List, потому что сами данные не упорядочены.

В приведенном выше примере используется значение по умолчанию referencedColumnName, в отличие от примера в wikibook. Если это не сработает, попробуйте явное:

@OneToMany
@JoinColumn(name="TXTHEAD_CODE", referencedColumnName="DATREG_META_CODE")
private Set<Text> text;