QueryDSL 加入具有单向关系的多个实体

QueryDSL join on multiple entities with one way relationships

我有一些类似于以下的实体(伪代码)

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);

然后,如预期的那样,我收到 "Undeclared path" 错误。

我可以

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 子句限制结果。我想知道是否有没有交叉连接的方法来做到这一点。

如果不更改实体类型,您将需要使用交叉联接来连接查询中的实体。