У меня есть 2 объекта A и B. Оба связаны через новый объект AB.
public class A {
// other fields
@OneToOne(mappedBy = "a")
private AB ab;
}
public class B {
// other fields
@OneToOne(mappedBy = "b")
private AB ab;
}
public class AB{
// more fields
@ManyToOne
@JoinColumn(name = "a_id")
private A a;
@ManyToOne
@JoinColumn(name = "b_id")
private B b;
}
Теперь приведенный выше код работает, но когда я пытаюсь добавить связь непосредственно из A в B, мои результаты всегда пусты.
public class A {
// other fields
@OneToOne(mappedBy = "a")
private AB ab;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<B> b;
}
Я пробовал это, но запрос на соединение, который срабатывает, всегда возвращает пустой результат.
Я полагаю, вы также пытались сделать Set b присоединяемой колонкой? Дополнительная информация о сущностях в целом может помочь.




Проблема в том, что вы используете @OneToOne с одной стороны и @ManyToOne с другой стороны.
Вы должны использовать @OneToMany в классе A и B. Что вполне логично: если к A можно подключить несколько AB, то в классе A должна быть коллекция AB.
И после того, как вы измените эти аннотации, вы сразу же увидите, что связь между A и B — это @ManyToMany.
Возможно, для аннотации «один ко многим» требуется атрибут mappedBy (как и другие).