You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 16:00:28