2012-01-18 51 views
10

我有一個具有多級繼承的複雜類層次結構,我需要使用HQL查詢該層次結構中的某些特定類型。針對多種類型/類的HQL查詢

比方說,我有類貓,狗和猴子,與一個共同的基地級動物。

我該如何編寫一個只選擇其中一些的查詢,比方說,Cat and Dog?

我還需要根據某些動物屬性進行排序或過濾 - 比方說,Sex =「Male」的動物並按名稱排序。

這可能嗎?

回答

11

標準JPQL函數是TYPE(),在Hibernate中也支持,如documentation中所述。

請,按照一個例子:

select a from Animal a 
where type(a) in ('Cat', 'Dog') 
    and a.sex = 'Male' 
order by a.name 

Hibernate也使用.class隱式屬性:

select a from Animal a 
where a.class in ('Cat', 'Dog') 
    and a.sex = 'Male' 
order by a.name 
+0

根據[NH科諾](http://knol.google.com/k/nhibernate-chapter-12-hql-the-hibernate-query-language)by Fabio Maulo,「特殊屬性類在多態持久化的情況下訪問實例的鑑別器值。被翻譯成其鑑別值。「 - 所以它看起來像支持。我明天早上會試試,並在此發佈結果,謝謝! – 2012-01-19 01:56:15

+0

神奇的.class屬性在NH中非常適合HQL!作爲警告,Criteria API不太有用 - 它需要一個可怕的解決方法,從映​​射手動檢索鑑別符,因爲Criteria API不會將類名轉換爲鑑別符值,但期望您知道鑑別符提前值。可怕的東西。但使用HQL,它的效果非常好! – 2012-01-27 04:09:35