JPA 2.0 允许查询使用 TYPE 运算符限制从多态查询返回的类。从 JPA 2.0 规范:
4.6.17.4 实体类型表达式
实体类型表达式可用于限制查询多态性。TYPE 运算符返回参数的确切类型。
实体类型表达式的语法如下:
entity_type_expression ::=
type_discriminator |
entity_type_literal |
input_parameter
type_discriminator ::=
TYPE(identification_variable |
single_valued_object_path_expression |
input_parameter )
entity_type_literal由实体名称指定。
实体的 Java 类用作输入参数来指定实体类型。
例子:
SELECT e
FROM Employee e
WHERE TYPE(e) IN (Exempt, Contractor)
SELECT e
FROM Employee e
WHERE TYPE(e) IN (:empType1, :empType2)
SELECT e
FROM Employee e
WHERE TYPE(e) IN :empTypes
SELECT TYPE(e)
FROM Employee e
WHERE TYPE(e) <> Exempt
JPA 1.0 不提供这种机制,因此如果您使用 JPA 1.0,则使用标准 JPQL 将无法实现。
如果您不介意使用专有 HQL,那么您可以使用特殊属性class
:
同样,特殊属性class
在多态持久性的情况下访问实例的鉴别器值。嵌入在 where 子句中的 Java 类名将被转换为它的鉴别器值。
from Cat cat where cat.class = DomesticCat
所以在你的情况下,我会尝试这样的事情:
SELECT MAX(a.columnName) FROM A a where a.x.class = Y