10
我有一个具有多级继承的复杂类层次结构,我需要使用HQL查询该层次结构中的某些特定类型。针对多种类型/类的HQL查询
比方说,我有类猫,狗和猴子,与一个共同的基地级动物。
我该如何编写一个只选择其中一些的查询,比方说,Cat and Dog?
我还需要根据某些动物属性进行排序或过滤 - 比方说,Sex =“Male”的动物并按名称排序。
这可能吗?
我有一个具有多级继承的复杂类层次结构,我需要使用HQL查询该层次结构中的某些特定类型。针对多种类型/类的HQL查询
比方说,我有类猫,狗和猴子,与一个共同的基地级动物。
我该如何编写一个只选择其中一些的查询,比方说,Cat and Dog?
我还需要根据某些动物属性进行排序或过滤 - 比方说,Sex =“Male”的动物并按名称排序。
这可能吗?
标准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
根据[NH科诺](http://knol.google.com/k/nhibernate-chapter-12-hql-the-hibernate-query-language)by Fabio Maulo,“特殊属性类在多态持久化的情况下访问实例的鉴别器值。被翻译成其鉴别值。“ - 所以它看起来像支持。我明天早上会试试,并在此发布结果,谢谢! – 2012-01-19 01:56:15
神奇的.class属性在NH中非常适合HQL!作为警告,Criteria API不太有用 - 它需要一个可怕的解决方法,从映射手动检索鉴别符,因为Criteria API不会将类名转换为鉴别符值,但期望您知道鉴别符提前值。可怕的东西。但使用HQL,它的效果非常好! – 2012-01-27 04:09:35