2009-08-13 25 views
4

假設兩個表,A[a_id, b_id]B[b_id,c]的屬性。HQL:爲了通過可爲空的屬性

我需要執行表格"From A a ORDER BY a.b.c"的HQL查詢,而b可以在類A中爲空。

查詢,但是,只返回A具有非空b財產情況。 這是因爲Hibernate的生成形式"SELECT FROM A,B WHERE A.b_id = B.b_id ORDER BY B.c"

什麼是返回A與那些在bnull所有情況下出現第一個/最後的方式SQL?

回答

0

什麼:

from A a left join a.b_fk b order by b.c 

左側加入照顧使加入的,即使b_fk財產上的Java實體(不表)爲空。

編輯:對不起,我mentionned不同的排序空值。要排序(不考慮空值),可以指定'desc'來反轉排序順序(default ='asc')。對於空值,我相信Hibernate允許默認的數據庫命令...自己嘗試一下你的數據庫,看看會發生什麼(對不起,在後期的第一個版本誤導)。

大量的信息可以Hibernate的參考文檔中找到:
http://docs.jboss.org/hibernate/stable/core/reference/en/html/queryhql.html

其餘的通常取決於你使用的數據庫...

0

我有同樣的問題,我必須解決它像這:

SELECT a 
FROM a 
LEFT JOIN a.b b 
LEFT JOIN b.c c 
ORDER BY c.id 

這是在HQL語法!

「左JOIN」允許顯示線時,孩子是NULL。

事實上,如果不指定連接時,Hibernate會自動創建一個「INNER JOIN」,它刪除NULL孩子。