尝试在 HQL 中将 SUM 与 HAVING 结合使用时出现 "expecting CLOSE, found '=' " 异常

Got "expecting CLOSE, found '=' " exception when tried to use SUM with HAVING in HQL

我正在用 HQL 重写我的 JDBC 查询。

对于每项工作,我都有一个工作流程,每个工作流程都有一些任务。 任务可以是“0”、“1”、“2”和“3”类型,并且具有 BOOL 列 'completed'。每个工作流至少具有每种类型的一项任务。我只需要获取那些作业,其工作流中只有“0”类型的任务正在完成。

这是我的 JDBC 查询:

"SELECT j.*

FROM job j

INNER JOIN workflow w

ON j.id = w.job_id

INNER JOIN task t

ON t.workflow_id = w.id

WHERE j.company_id = ?

GROUP BY j.id

HAVING SUM(t.completed = TRUE AND t.type != 0) = 0"

这是我的 HQL 查询:

"SELECT j

FROM Job j

JOIN c.workflow w

JOIN task t

WHERE j.company_id = :companyId

GROUP BY j.id

HAVING SUM(t.completed = TRUE AND t.type != 0) = 0"

但是 运行 这个 HQL 查询给了我 "expecting CLOSE, found '='" SUM 子句的异常。

经过几个小时的努力,我设法找到了答案。这是工作查询:

"SELECT DISTINCT j
FROM Job j, Workflow w, Task t
WHERE w.job.id = j.id AND
t.workflow.id = w.id AND
j.company.id = ? AND
(SELECT COUNT(*)
FROM Task t
WHERE t.workflow.id = w.id AND
t.completed = TRUE AND
t.type != 0) = 0"