如果我有一个扩展Fruit的Apple类,我如何编写一个JPQL查询来返回严格是Fruit而不是Apple的所有对象?
答案 0 :(得分:4)
使用TYPE
运算符可以在JPA 2.0中实现。从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 f
FROM Fruit f
WHERE TYPE(f) <> Apple
但这在JPA 1.0中不可用,如果您使用的是JPA 1.0,则必须依赖提供商特定的扩展(在这种情况下请提及您的提供商)。