JPQL заявката не включва обекти, ако няма деца, въпреки че е посочено извличане на ляво присъединяване

Използване на Spring 4.1.4, Spring Data 1.7.1, Hibernate 4.3.8

Опитвам се да накарам извличане на ляво присъединяване да работи в JPQL от съображения за производителност, но в случаите, когато SubItem1 има 0 записа, не получавам обратно своя обект.

Моят JPQL изглежда така:

@Query("select distinct foo from Foo foo join fetch foo.parentItem pi left join fetch pi.ZeroOrMoreChildren zChild join fetch zChild.parentOfZChild pofz join fetch pofz.grantParentOfZChild where foo.someFeild = ?1")

Проблемът, който имам, е, че има 0 записи в zChild, тогава не получавам обратно foo обект. Всички мои обекти са хидратирани правилно, но очевидно ми липсват обекти, които трябва да са там.


person Zipper    schedule 21.03.2015    source източник


Отговори (1)


Разбрах, че проблемът е, че имате нужда от леви съединения докрай надолу.

Така че заявката трябваше да изглежда така.

@Query("select distinct foo from Foo foo join fetch foo.parentItem pi left join fetch pi.ZeroOrMoreChildren zChild left join fetch zChild.parentOfZChild pofz left join fetch pofz.grantParentOfZChild where foo.someFeild = ?1")

person Zipper    schedule 21.03.2015