Java 找不到命名参数
我有以下疑问:Java 找不到命名参数,java,hibernate,Java,Hibernate,我有以下疑问: <named-native-query name="GET_Objects_REPORT"> <query> <![CDATA[ SELECT * FROM KAP.VC JOIN KAP.V ON VC.ID = V.ID JOIN KAP.VI ON VC.ID = VI.ID AND (VI."DATE
<named-native-query name="GET_Objects_REPORT">
<query>
<![CDATA[
SELECT *
FROM KAP.VC
JOIN KAP.V ON VC.ID = V.ID
JOIN KAP.VI ON VC.ID = VI.ID AND (VI."DATETIME" BETWEEN :startDate and :endDate)
]]>
</query>
</named-native-query>
执行查询时,我得到以下异常:
java.lang.IllegalArgumentException:org.hibernate.QueryParameterException:找不到命名参数[startDate]
公共列表GetAllObject(最终日期开始日期、最终日期结束日期){
最终查询q=em.createNativeQuery(“获取对象报告”);
q、 设置参数(“开始日期”,开始日期);
q、 setParameter(“endDate”,endDate);
返回q.getResultList();
}
您能告诉我我的查询有什么问题吗?您的SQL查询是
GET\u Objects\u REPORT
(这是无效的SQL),没有startDate
参数
您需要使用
em.createNamedQuery(“GET\u Objects\u REPORT”)
来回答为什么在XML文件(orm.XML?根据其模式是否有效?)中找不到查询的问题,但您可以将命名查询(本机查询或非本机查询)放在它们所属的实体中(这不是要求)而不是orm.xml
或persistence.xml
@Entity
@NamedNativeQueries({
@NamedNativeQuery(name="Foobar", query = "...")
})
public class MyEntity {
}
(顺便说一句,很抱歉我之前的(删除的)答案。它不相关,而且是错误的)。要么您没有名为startDate的参数,要么它位于不同的位置。不,我使用相同的参数传递了参数name@user2490510post complete Code您创建的是本机查询,而您需要的是命名查询。为什么它不是有效的SQL,我在XML中添加本机查询,并从DAO调用它。根据参数,参数由q.setParameter(“startDate”,startDate)定义;请看第二句。
@Entity
@NamedNativeQueries({
@NamedNativeQuery(name="Foobar", query = "...")
})
public class MyEntity {
}