Sql 子类上的jpa连接查询
我在JPA(hibernate)中有以下关系 对象X有两个子类,Y和Z 对象A与对象X之间有多个单面关系(注意,这是单面关系,因此对象X无法看到对象A) 现在,我想获取对象a中某列的最大值,但仅限于关系属于特定子类型的情况,即…Y 那么,这就等于…在对象A中,在所有与Y有关系的A实例中,得到column1的最大值。这可能吗?我有点不知所措,不知道该如何查询它 我在想这样的事情:Sql 子类上的jpa连接查询,sql,hibernate,jpa,polymorphism,polymorphic-associations,Sql,Hibernate,Jpa,Polymorphism,Polymorphic Associations,我在JPA(hibernate)中有以下关系 对象X有两个子类,Y和Z 对象A与对象X之间有多个单面关系(注意,这是单面关系,因此对象X无法看到对象A) 现在,我想获取对象a中某列的最大值,但仅限于关系属于特定子类型的情况,即…Y 那么,这就等于…在对象A中,在所有与Y有关系的A实例中,得到column1的最大值。这可能吗?我有点不知所措,不知道该如何查询它 我在想这样的事情: String query = "SELECT MAX(a.columnName) FROM A a join a.x;
String query = "SELECT MAX(a.columnName) FROM A a join a.x;
Query query = super.entityManager.createQuery(query);
query.execute();
然而,这并没有考虑到X的子类…所以我有点迷茫
任何帮助都将不胜感激。我还没有测试过它,但请尝试以下方法: 从连接a.x中选择MAX(a.columnName),其中a.x.class=y.class 希望有帮助,
AntonJPA2.0允许查询使用类型运算符限制从多态查询返回的类。来自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 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
所以在你的情况下,我会尝试这样的方式:
SELECT MAX(a.columnName) FROM A a where a.x.class = Y
感谢帕斯卡的详尽而清晰的回答!真的很感激!
SELECT MAX(a.columnName) FROM A a where a.x.class = Y