命名查询Hibernate中的坏语法错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命名查询Hibernate中的坏语法错误相关的知识,希望对你有一定的参考价值。
当我尝试用Java中的hibernate运行这个查询时出错了并抛出一个错误
( 12002 ) Internal Service Error. Exception Message : Bad Sql Grammar Exception occurred [Hibernate operation: could not execute query; bad SQL grammar [SELECT COMDT_COM_STAT, COMDT_COM_REFNO, COMDT_COM_CCY
FROM COMDT
WHERE COMDT_COM_REFNO = ?
AND COMDT_COM_RDN BETWEEN ? AND ?
AND COMDT_COM_STAT = ?
GROUP BY COMDT_COM_STAT, COMDT_COM_REFNO, COMDT_COM_CCY
ORDER BY COMDT_COM_REFNO]; nested exception is java.sql.SQLException: Invalid Column Name]
但是当我在PLSQL中使用适当的输入运行相同的查询时,一切都按预期工作。我正在处理这个错误2天但没有出现。
谢谢。
QUERY
<sql-query name="getCommissionBetweenDatesWithStat">
<return alias="xyz"
class="com.ykb.hmn.cms.commission.datamodel.IComDetail"/>
<![CDATA[
SELECT COMDT_COM_CCY AS {xyz.currency}, SUM(xyz.COMDT_COM_AMT1) AS {xyz.amount1}
FROM COMDT
WHERE COMDT_COM_REFNO = :refNo
AND COMDT_COM_RDN BETWEEN :startRdn AND :endRdn
AND COMDT_COM_STAT = :stat
GROUP BY COMDT_COM_STAT, COMDT_COM_REFNO, COMDT_COM_CCY
ORDER BY COMDT_COM_REFNO
]]>
</sql-query>
Entity
<class name="com.ykb.hmn.cms.commission.datamodel.IComDetail"
table="COMDT">
<tuplizer class="com.ykb.hmn.inf.core.datamodel.IntfEntityTuplizer"
entity-mode="pojo" />
<id name="oid" type="java.lang.Long">
<column length="17" name="COMDT_ID" />
</id>
<property name="refNo" type="long">
<column length="12" name="COMDT_COM_REFNO" />
</property>
<property name="stat" type="string">
<column length="1" name="COMDT_COM_STAT" />
</property>
<property name="relDay" type="int">
<column length="5" name="COMDT_COM_RDN" />
</property>
<property name="amount1" type="big_decimal">
<column precision="18" scale="2" name="COMDT_COM_AMT1" />
</property>
<property name="currency" type="string">
<column length="4" name="COMDT_COM_CCY" />
</property>
<class/>
Table Schema
COMDT_ID NUMBER(17)
COMDT_COM_REFNO NUMBER(12)
COMDT_COM_AMT1 NUMBER(18,2)
COMDT_COM_STAT VARCHAR2(1)
COMDT_COM_RDN NUMBER(5)
COMDT_COM_CCY VARCHAR2(4)
谢谢。
答案
我的猜测,应该使用属性名称而不是列名声明hibernate命名查询。因此,不要在命名查询中使用列名,而是使用属性名称。 有关更多详细信息,请参阅此示例:https://www.journaldev.com/3451/hibernate-named-query-example-namedquery
以上是关于命名查询Hibernate中的坏语法错误的主要内容,如果未能解决你的问题,请参考以下文章
在下面的代码片段中的剩余 ='passthrough' 处的代码中出现语法错误
Hibernate-ORM:14.Hibernate中的命名查询