Jpa JPQL排除查询中的子类
如果我有一个扩展了Fruit的类Apple,那么如何编写JPQL查询来返回严格意义上的Fruit而非Apple的所有对象呢?这在JPA2.0中可以使用Jpa JPQL排除查询中的子类,jpa,jpql,Jpa,Jpql,如果我有一个扩展了Fruit的类Apple,那么如何编写JPQL查询来返回严格意义上的Fruit而非Apple的所有对象呢?这在JPA2.0中可以使用TYPE操作符。来自JPA 2.0规范: 4.6.17.4实体类型表达式 可以使用实体类型表达式 限制查询多态性。这个 类型运算符返回确切的类型 这是争论的焦点 实体类型的语法 表达方式如下: entity_type_expression ::= type_discriminator | entity_type_li
TYPE
操作符。来自JPA 2.0规范:
4.6.17.4实体类型表达式
可以使用实体类型表达式
限制查询多态性。这个
类型运算符返回确切的类型
这是争论的焦点
实体类型的语法
表达方式如下:
entity_type_expression ::=
type_discriminator |
entity_type_literal |
input_parameter
type_discriminator ::=
TYPE(identification_variable |
single_valued_object_path_expression |
input_parameter )
实体类型表达式::=
U型鉴别器|
实体类型文字|
输入参数
类型识别器::=
类型(标识)变量|
单值对象路径表达式|
输入(U参数)
实体类型文字是
由实体名称指定
使用实体的Java类
作为输入参数来指定
实体类型
所以你可以这样做:
SELECT f
FROM Fruit f
WHERE TYPE(f) <> Apple
选择f
从水果f
其中(f)型苹果
但这在JPA1.0中不可用,如果您使用的是JPA1.0,则必须依赖于特定于提供商的扩展(在这种情况下请提及您的提供商)
工具书类
- JPA2.0规范
- 第4.4.8节“多态性”
- 第4.6.17.4节“实体类型表达式”
。