这让我的一天很痛苦。
我是 HQL 的初学者,正在将 SQL 语句转换为 HQL。
SQL 语句没有那么复杂,大致是这样的。
SELECT t.teamworkerdid, COUNT(t.teamworkerdid), SUM(NVL(p.percentagework, 1))
FROM WORKER_TEAM t
LEFT JOIN PARTIAL_WORK p
ON (t.teamworkerdid = p.idworkerteam)
WHERE
( e.startwork <= CURRENT_DATE
AND
e.finishwork >= CURRENT_DATE);
表 WORKER_TEAM 具有所有工人 ID,这是 PARTIAL_WORK 表中的外键。但并非 W_T 中的所有团队工作人员都在 P_T 表中,因为 100% 工作的工作人员在部分工作表中没有条目。这就是 y 使用带 1 个选项的左连接和 NVL 的原因。
我做了数据库表名和 POJO 变量之间的所有转换。尝试使用上句的简化版本,一切顺利,例如 SELECT COUNT(t.teamworkerdid) FROM WORKER_TEAM t, PARTIAL_WORK p WHERE (t.teamworkerdid = p.idworkerteam) 但在 HQL 中(我不更改 var 名称因为会让每个人都感到困惑)。
好的,自然连接工作正常*强调文本*,因为我在控制台中激活 HQL 净化输出并获得工作正常的 SQL 语句。
当我尝试在 HQL 中执行 LEFT JOIN 时出现问题,仅使用 LEFT JOIN 更改隐式自然连接,使用 WITH 关键字而不是 ON SQL 关键字,程序崩溃并抛出异常。HQL 在生成 NULL 单元格时有任何问题是我做错了。
提前致谢。
PD 我知道 NVL 在 HQL 中不起作用,替代品是 *coalesce(column_name, 'asdf')*。