Как определить однонаправленное отношение 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;
Другие вопросы по тегам