Hibernate 多类型/类的HQL查询

Hibernate 多类型/类的HQL查询,hibernate,nhibernate,types,hql,Hibernate,Nhibernate,Types,Hql,我有一个具有多个继承级别的复杂类层次结构,我需要使用HQL查询该层次结构中的特定类型 假设我有猫、狗和猴子,还有一个普通的基类动物 我如何编写一个只选择其中一些(比如猫和狗)的查询 我还需要根据某些动物属性进行排序或过滤——比如说,使用Sex=“Male”并按名称排序的动物 这是可能的吗?标准JPQL函数是TYPE(),Hibernate也支持该函数,如its中所述 请举一个例子: select a from Animal a where type(a) in ('Cat', 'Dog')

我有一个具有多个继承级别的复杂类层次结构,我需要使用HQL查询该层次结构中的特定类型

假设我有猫、狗和猴子,还有一个普通的基类动物

我如何编写一个只选择其中一些(比如猫和狗)的查询

我还需要根据某些动物属性进行排序或过滤——比如说,使用Sex=“Male”并按名称排序的动物


这是可能的吗?

标准JPQL函数是
TYPE()
,Hibernate也支持该函数,如its中所述

请举一个例子:

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

根据Fabio Maulo的说法,“在多态持久性的情况下,特殊属性类访问实例的鉴别器值。嵌入where子句中的Java类名将被转换为其鉴别器值。”-因此,这看起来是受支持的。明天早上我会试试,然后把结果贴在这里,谢谢!神奇的.class属性在NH的HQL中非常有效!作为警告,Criteria API没有那么有用-它需要一个可怕的解决方法,从映射中手动检索鉴别器,因为Criteria API不会将类名转换为鉴别器值,而是希望您提前知道鉴别器值。可怕的东西。但是使用HQL,它工作得非常好!