Я использую hibernate 3.6.10.Final и MySQL 5.5.Hibernate генерирует перекрестное соединение вместо левого соединения
Я написал динамический запрос, как это:
"from " + clazz.getName()+ " ORDER BY "+sortField+" "+sortDirection
Мои Hibernate лиц имеют отношения/ребенок многих один родитель. если запрос упорядочено поля от родителя, спящий режим генерирует этот HQL выбор:
select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_
from parent parent0_
order by parent0_.PARENTFIELD ASC
если запрос упорядочен по полю от ребенка, я иметь следующую HQL:
select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_
from parent parent0_
cross join child1_
where parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC
второй запрос возвращает меньше результатов, потому что parent0_.ID_CHILD может быть нулевым. Есть ли способ заставить спящий режим сгенерировать левое соединение?
мне нужно что-то вроде этого
select parent0_.ID as ID10_,
parent0_.ID_CHILD as ID6_10_
from
parent parent0_
left join
child child1_
on
parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC
Это ответ? Я не хочу писать конкретный запрос для родительских и дочерних объектов. Я хочу повторно использовать этот общий запрос, заставляющий спящий режим брать родителей с нулевым ребенком. – Tostis
Затем вам нужен запрос с явным левым соединением. Об этом нет. 'child.parent.someProperty' всегда будет генерировать внутреннее соединение. Прочтите документацию. Он там. –