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 {

}