QueryDSL объединяет несколько объектов с односторонними отношениями

У меня есть объекты, похожие на следующие (псевдокод)

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. Интересно, есть ли способ сделать это без перекрестного соединения.


person Jay    schedule 09.01.2015    source источник


Ответы (1)


Без изменения типов сущностей вам нужно будет использовать перекрестное соединение для соединения сущностей в запросе.

person Timo Westkämper    schedule 10.01.2015