2014-08-27 51 views
0

我有以下查询:无法找到名为参数

<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(); 
} 

莫非你请咨询我的查询有什么问题?

+1

要么你没有名为startDate的参数,要么它在不同的位置。 – Yann 2014-08-27 09:42:45

+0

否我通过了同名参数 – User 2014-08-27 09:46:37

+0

@ user2490510发布完成代码 – 2014-08-27 09:49:03

回答

1

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

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

+0

为什么它不是一个有效的SQL,我在XML中添加了原生查询并从DAO调用它。根据参数,参数由q.setParameter(“startDate”,startDate)定义; – User 2014-08-27 10:00:57

+1

请看第二句。 – 2014-08-27 11:08:29

+0

非常感谢,它工作正常:) – User 2014-08-27 11:44:52

0

这不会回答这个问题,为什么没有发现查询而在一个XML文件(orm.xml中?是不是有效,根据其模式?),但你可以将您的命名查询(本机或不是本机)置于它们所属的实体中(这不是要求),而不是orm.xmlpersistence.xml

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

} 

(顺便说一句,对不起,我以前(删除)的答案。这是不恰当的,错误的)。

相关问题