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