У меня есть объекты, похожие на следующие (псевдокод)
class A {
Integer aId;
}
class B {
Integer bId;
@ManyToOne
A a;
}
class C {
Integer cId;
@ManyToOne
A a;
}
Я хотел бы использовать QueryDSL для получения списка B на основе критериев в C. Я бы не хотел создавать набор B или набор C в A.
If I do
query.from(b, c).innerJoin(b.a, a).fetch().innerJoin(c.a, a).
where(c.cId.eq(1)).list(b);
затем, как и ожидалось, я получаю перекрестное соединение.
If I do
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. Интересно, есть ли способ сделать это без перекрестного соединения.