Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 子类上的jpa连接查询_Sql_Hibernate_Jpa_Polymorphism_Polymorphic Associations - Fatal编程技术网

Sql 子类上的jpa连接查询

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;

我在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;
Query query = super.entityManager.createQuery(query);
query.execute();
然而,这并没有考虑到X的子类…所以我有点迷茫


任何帮助都将不胜感激。

我还没有测试过它,但请尝试以下方法:

从连接a.x中选择MAX(a.columnName),其中a.x.class=y.class

希望有帮助,
Anton

JPA2.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