是否可以使用任何方法将以下内容转换为 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 查询可以使用 JOIN
和 GROUP 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/