Сущности, как показано ниже:
class A {
Long id;
@ManyToMany
@JoinTable(name = "rel_a_b", joinColumns = @JoinColumn(name = "a_id"), inverseJoinColumns = @JoinColumn(name = "b_id"))
Set<B> bSet;
}
class B {
Long id;
@ManyToMany(mappedBy = "bSet")
Set<A> aSet;
@ManyToMany
@JoinTable(name = "rel_b_c", joinColumns = @JoinColumn(name = "b_id"), inverseJoinColumns = @JoinColumn(name = "c_id"))
Set<C> cSet;
}
class C {
Long id;
@ManyToMany(mappedBy = "cSet")
Set<B> bSet;
}
Мне нужно выбрать A
сущности и присоединиться к выборке bSet
и cSet
в B
сущности. Используя критерии JPA, коды, как показано ниже:
final Fetch<A, B> bSetFetch = rootA.fetch("bSet", JoinType.LEFT);
bSetFetch.fetch("cSet", JoinType.LEFT);
, работают отлично, но я не могу добиться этого с помощью QueryDSL. Я пробовал
final QA a = QA.a;
jpaQuery
.from(a)
.leftJoin(a.bSet, QB.b).fetchJoin()
.leftJoin(QB.b.cSet).fetchJoin()
.select(a)
, но выдает исключение, что
query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=b,role=A.b,tableName=`b`,tableAlias=b4_,origin=a a2_,columns={a2_.id ,className=B}}] [select a
from A a
left join fetch a.bSet as b
left join fetch b.cSet]]
, если без fetchJoin()
, результаты не включают bSet
и cSet
. Может ли кто-нибудь это решить?