QueryDSL以单向关系连接多个实体

时间:2015-01-09 16:06:53

标签: querydsl

我有一些类似于以下(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子句限制结果。我想知道如果没有交叉连接,有没有办法做到这一点。

1 个答案:

答案 0 :(得分:1)

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