无法找到命名参数

时间:2014-08-27 09:37:26

标签: 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."DATETIME" BETWEEN :startDate and :endDate)
         ]]>
    </query>
</named-native-query>               

执行查询时,出现以下异常:

  

java.lang.IllegalArgumentException:org.hibernate.QueryParameterException:找不到命名参数[startDate]

public List<Object[]> getAllObjects(final Date startDate, final Date endDate) {
    final Query q = em.createNativeQuery("GET_Objects_REPORT");
    q.setParameter("startDate", startDate);
    q.setParameter("endDate", endDate);

    return q.getResultList();
}

请问您的问题是什么问题?

2 个答案:

答案 0 :(得分:1)

您的SQL查询是GET_Objects_REPORT(这是无效的SQL),没有startDate参数。

您需要使用em.createNamedQuery("GET_Objects_REPORT")

答案 1 :(得分:0)

这不会回答为什么在XML文件中找不到查询的问题(orm.xml?根据其架构是否有效?),但是您可以将您的命名查询(无论是否为原生),在他们所属的实体中(这不是必需的)而不是orm.xmlpersistence.xml

@Entity
@NamedNativeQueries({
@NamedNativeQuery(name="Foobar", query = "...")
})
public class MyEntity {

}

(顺便说一下,对我以前的(删除的)答案感到抱歉。这不合适,也不错。)