2014-08-27 47 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 { 

} 

(順便說一句,對不起,我以前(刪除)的答案。這是不恰當的,錯誤的)。

相關問題