Вопрос
У меня есть 2 таблицы:
A
s_id(key) name cli type
B
sa_id(key) s_id user pwd
Так в Jpa У меня есть:
@Entity
class A...{
@OneToMany(fetch=FetchType.EAGER)
@JoinTable( name="A_B",
joinColumns={@JoinColumn(name="a_id", table="a",unique=false)},
inverseJoinColumns={@JoinColumn(name="b_id", table="b", unique=true)} )
Collection<B> getB(){...}
}
класс b - это просто базовый класс сущности без ссылки на A.
Надеюсь, это понятно. Мой вопрос: действительно ли мне нужна таблица соединений для такого простого соединения? Разве это не может быть сделано с помощью простого joincolumn или что-то?
Решение
Для этого вам не нужен JoinTable. Если класс B не имеет ссылки на класс A, то будет достаточно следующего
@Entity class A...{
@OneToMany(fetch=FetchType.EAGER)
Collection getB(){...} }
В большинстве случаев вам может потребоваться двунаправленное отношение, в этом случае B имеет ссылку на A. В этом случае вам нужно будет найти аннотацию @mappedBy. упоминается Павлом.
Другие советы
Нет, вам не нужна таблица соединений для OneToMany. Посмотрите на аннотацию @mappedBy
Быстрый ответ: если у вас есть отношение «многие ко многим», вам понадобится еще одна таблица. Если у вас есть отношения «один ко многим» или «многие к одному», вы этого не сделаете.