我有一些类似于以下(psuedocode)的实体
class A {
Integer aId;
}
class B {
Integer bId;
@ManyToOne
A a;
}
class C {
Integer cId;
@ManyToOne
A a;
}
我想使用QueryDSL根据C中的条件获取B列表。我不想在A中创建一组B或一组C。
如果我这样做
query.from(b, c).innerJoin(b.a, a).fetch().innerJoin(c.a, a).
where(c.cId.eq(1)).list(b);
然后,正如预期的那样,我得到了一个交叉连接。
如果我这样做
query.from(b).innerJoin(b.a, a).fetch().innerJoin(c.a, a).
where(c.cId.eq(1)).list(b);
然后,正如预期的那样,我得到一个“未声明的路径”错误。
我能做到
query.from(b, c).innerJoin(b.a, a).fetch().innerJoin(c.a, a).
where(c.cId.eq(1)).where(c.a.aId.eq(a.aId).list(b);
这会保持交叉连接,但会根据where子句限制结果。我想知道如果没有交叉连接,有没有办法做到这一点。
答案 0 :(得分:1)
如果不更改实体类型,则需要使用交叉连接来连接查询中的实体。