Hibernate HQL无法在sub select,Insert Into ... Select ...其中column =选择...中识别表别名

问题描述

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

INSERT INTO TABLE_1 (column,column,column)
SELECT 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,tab3.column;

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

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

令人惊讶的是,当我删除I​​nsert into语句并将查询转移到简单的Select查询时,问题消失了。我也尝试在PgAdmin(数据库为Postgresql)上运行查询,它有效,所以问题出在我想的HQL。

有什么想法吗?

谢谢大家

解决方法

这很可能是Hibernate的错误。您应该在https://hibernate.atlassian.net/和一个测试案例中创建一个问题:https://github.com/hibernate/hibernate-test-case-templates/blob/master/orm/hibernate-orm-5/src/test/java/org/hibernate/bugs/JPAUnitTestCase.java