jpa / queryDSL kérdés

Fórumok

Sziasztok!

adott ez a lekérdezés:


final List list =
new JPAQuery(entityManager).from(qdevice).leftJoin(qdevice.parentDevice)
.list(Projections.bean(Device.class, qdevice.id,qdevice.parentDevice));

(a parentDevice Device típusú)

Az a probléma, hogy a lekérdezés csak azokat a Device-okat adja vissza, ahol a parentDevice nem null. Ez miért van így? Hogyan kaphatnám vissza a null parentDevice értékű Device-okat? Ha kiveszem a Projections.bean-ből a qdevice.parentDevice bean-t, akkor jó.

QueryDsl verziója: 3.2.0

Hozzászólások

Mivel a projekcióban kijelölted a parentDevice-t és left join-al csatoltad rá, ezért gondolom a QueryDsl nem left outer join-t fog használni, hanem sima left join-t, emiatt bebukod a nullokat.
Számomra ez az egész query nagyon furcsa. Miért kell device ID -> parent device objektum map neked? Furcsa, hogy a device-ra nincs szükség, csak az ID-je kell, míg a parent-je meg teljesen kell...
Miért nem olyan query-t csinálsz, amiben a device-okat select-álod, és megkéred a query engine-t, hogy inicializálja a parent device relációt join-al? Nem értek a QueryDsl-hez, de JPA-val (illetve Hibernate-el) ezt simán meg lehet tenni, gondolom ezzel is.