1
我使用休眠3.6.10.Final和MySQL 5.5。休眠生成交叉连接,而不是左连接
我写了这样一个动态查询:
"from " + clazz.getName()+ " ORDER BY "+sortField+" "+sortDirection
我的休眠实体有多对一的父/子关系。 如果查询由父字段排序,休眠产生这个的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可能为空。 有没有办法强制hibernate生成左连接?
我需要的是这样的
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
那是答案吗?我不想为我的父母和子女实体编写特定的查询。我想重用这个通用查询,迫使hibernate把父母带到空子女身上。 – Tostis 2013-03-10 09:56:54
然后你需要一个明确的左连接查询。没有办法绕过它。 'child.parent.someProperty'将始终生成一个内部连接。阅读文档。它在那里。 – 2013-03-10 09:59:08