首页 > 解决方案 > Hibernate HQL 无法识别 sub select 中的表别名,Insert Into ... Select ... where column = (Select...)

问题描述

我有这个 HQL,你会注意到它包含同一张表 TABLE_2(tab2 和 tab5)的两个实例:

INSERT INTO TABLE_1 (column, column, column,
column, column, column, column, column)
SELECT column, column, column,
column, column, column, column, column
FROM TABLE_2 as tab2 INNER JOIN tab2.message as tab3 INNER JOIN tab3.service as tab4, TABLE_2 as tab5
WHERE tab2.dateChgt = (SELECT MAX(dateChgt) FROM TABLE_2 WHERE code = :pCd1 AND message.num = tab3.num GROUP BY message.num)
AND tab5.dateChgt = (SELECT MAX(dateChgt) FROM TABLE_2 WHERE code = :pCd2 AND message.num = tab3.num GROUP BY message.num)
AND tab2.code = :pcode1
AND tab5.code = :pcode2
AND tab2.message.num = tab5.message.num
AND tab2.dateChgt <= tab5.dateChgt
AND tab5.dateChgt >= :pDateDebRech
AND tab5.dateChgt <= :pDateFinRech
AND tab3.typeMessage = :pTypeMessage
GROUP BY tab3.num, tab4.column, tab4.column, tab3.column;

所以错误是:“t_message”表的 FROM 子句中的条目引用无效。提示:也许你想引用表“tmessage1_”的别名。

问题是我已将别名 tab3 赋予 t_message(HQL 中的 tab2.message),但当我调用 tab3.num 时,HQL 不会重新识别子 Select 中的别名 tab3。

令人惊讶的是,当我删除 Insert into 语句并将查询转移到简单的 Select 查询时,问题就消失了。我也尝试在 PgAdmin 上运行查询(数据库是 PostgreSql),它可以工作,所以我想问题来自 HQL。

有任何想法吗 ?

多谢你们

标签: hibernateselectinsertsubqueryhql

解决方案



推荐阅读