sql - 这个在 SELECT 中带有子查询的 SQL 可以转换为 Hibernate 3.0.5 HQL 吗?

标签 sql hibernate hql outer-join

是否可以使用任何方法将以下内容转换为 HQL 3.0.5?子查询、带有谓词的外连接等?

SELECT c.case_id, 
       (SELECT MAX(a.begin_date)
          FROM assignment a
         WHERE a.case_id = c.case_id)  
  FROM case c

事例和赋值之间的关系是一对多。查询的目的是返回所有案例及其最近的分配开始日期(如果存在)。

我很难准确地找到 Hibernate 3.0.5 支持什么和不支持什么,但我看到有迹象表明它只支持 WHERE 中的子查询。

编辑:如果给定案例不存在分配,则 case_id 仍应返回,并且返回的分配开始日期应为 null。

最佳答案

首先,您的 SQL 查询可以使用 JOINGROUP BY 而不是子查询来重写:

SELECT c.case_id, MAX(a.begin_date)
FROM case c LEFT JOIN assignment a ON a.case_id = c.case_id
GROUP BY c.case_id

在这种形式下,它可以轻松转换为 HQL,如下所示(取决于映射):

SELECT c.id, MAX(a.beginDate)
FROM Case c LEFT JOIN c.assignments a
GROUP BY c.id

关于sql - 这个在 SELECT 中带有子查询的 SQL 可以转换为 Hibernate 3.0.5 HQL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594139/

相关文章:

mysql - 在MYSQL中获取一个月中的星期几

java - Hibernate 二级查询缓存不工作急切获取

sql - RDBMS 中传递依赖的问题是什么?

sql - 在数据库中使用序列的原因是什么?

java - 使用 MS SQL 的 JAX-RS 中的行级安全性

java - FetchMode.JOIN 急切地获取成员列表显然会产生笛卡尔积

java - 使用 JPQL 或 HQL 时如何将 @OneToMany 字段映射到 List<DTO>?

java - Hibernate 返回整数值

mysql - 案例、子查询和连接

SQL - 克隆记录及其后代