Hibernate命名查询执行报错ORA-00933:SQL命令未正确结束
Hibernate命名查询执行报错ORA-00933:SQL命令未正确结束
嘿,我一眼就揪出问题根源了!你遇到的这个ORA-00933错误,核心原因是查询标签用错了,具体来说:
- 你在hbm配置文件里用了
<sql-query>标签,但里面写的却是HQL语句,这完全不匹配!<sql-query>是用来执行原生数据库SQL的,Hibernate会直接把这段内容原封不动发给Oracle,但Oracle根本不认识SystemParameterValueImpl这种实体类名(它只认数据库里的真实表名),自然会报SQL语法错误。
解决方案:把<sql-query>换成<query>标签
<query>才是Hibernate用来定义HQL命名查询的正确标签,它会帮你把HQL解析成对应数据库(这里是Oracle)能识别的SQL语句。修改后的hbm配置应该是这样的:
<query name="findSystemParameterValueApplicableOnDate"> <return class="com.amor.hcplus.application.systemparameter.domain.SystemParameterValueImpl" /> <![CDATA[ select s1 from SystemParameterValueImpl as s1 join s1.systemParameter as p1 where p1.id = :parameterName and s1.effectiveGasDay = ( select max(s2.effectiveGasDay ) from SystemParameterValueImpl s2 join s2.systemParameter as p2 where p1.id = p2.id and s2.effectiveGasDay <= :date ) order by p1.id ]]> </query>
另外从报错信息里的SQL片段能看到,生成的语句最后多了个多余的逗号(order by p1.id,),这也是错误使用<sql-query>导致Hibernate解析异常的结果。换成<query>标签后,Hibernate会正确处理HQL语法,生成合法的Oracle SQL,这个多余的逗号也会消失。
改完之后再执行查询,应该就能正常跑通啦!
备注:内容来源于stack exchange,提问作者dynamo
相关产品推荐
相关产品推荐

