尝试在 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"
我正在用 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"