【发布时间】:2020-05-28 03:53:07
【问题描述】:
实体如下:
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 实体并加入B 实体中的提取bSet 和cSet。使用JPA Criteria,代码如下:
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。谁能解决这个问题?
【问题讨论】:
标签: jpa join many-to-many querydsl