Можем ли мы иметь аннотации @Column и @OneToOne для одной из переменных? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть 2 таблицы

  • Таблица a - идентификатор, b_id, имя

  • Таблица b - идентификатор, имя

когда мне нужно создать POJO Entity, я хотел иметь b_id в качестве столбца и внешний ключ для получения значений из b.

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Самый простой способ - просто сопоставить внешний ключ и получить доступ к идентификатору в экземпляре B:

A a = em.find(A.class, 1L);
Long bid = a.getB().getBid();

Это не должно вызывать проблем с производительностью, но для особых случаев, когда это происходит, есть конкретные доступные решения.

Возможны и другие подходы, но в итоге у вас будет один фрагмент данных, закодированный в двух местах, и их синхронизация станет постоянным источником проблем и тонких ошибок.

0 голосов
/ 11 июня 2019

используйте @JoinColumn Аннотация вместо @Column для Mapped полей. Подробнее о JoinColumn по этой ссылке

0 голосов
/ 11 июня 2019

Это не проблема.Но вы должны пометить столбец только для чтения либо в столбце b_id, либо в отношении.

Пример 1 Только для чтения столбца:

public class A {

    @Column(insertable = false, updateable = false)
    private Integer bId;

    @ManyToOne
    private B b;

}

Пример 2 Отношение только для чтения:

public class A {

    private Integer bId;

    @JoinColumn(name="b_id", insertable = false, updatable = false)
    @ManyToOne
    private B b;

}
...