2012-01-18 29 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