2014-06-20 45 views
2

我的查詢是這樣的:參數不存在作爲一個已命名的參數

Query query1 = session.createQuery("select c.email from Contact c where c.contactNo =:contactNo"); 
    query1.setInteger("contactNo", 22); 

我得到的錯誤是:

異常在線程「主」 java.lang.IllegalArgumentException異常: 參數contactNo不存在作爲一個命名參數[選擇觸點C c.email其中c.contactNo =?]

據實效F ine with

Query query = session.createQuery("select c.email from Contact c where c.contactNo = ?"); 
    query.setInteger(0, 22); 

爲什麼第一個查詢不起作用?

+1

我認爲你必須在你的問題是錯誤的。您顯示的錯誤表明,「contactNo」不作爲查詢中的命名參數存在。那麼,在你的查詢中(根據你突出顯示的日誌),你沒有「contactNo」,因此正確拋出異常。它可能發生了,你認爲你有一個命名參數查詢(你也已經顯示在你的第一行問題中),但在你的實際代碼中你真的有一個數字參數,因此你看到第二個查詢運行良好。 – Rash

回答

4
Query query1 = session.createQuery("select c.email from Contact c where c.contactNo =:contactNo"); 
query.setParameter("contactNo", 22); 

嘗試使用的setParameter代替setInteger

+6

歡迎來到SO!沒有任何文字,這樣的答案會出現在低質量評審隊列中。這意味着您的答案被稱爲robo-reviewers的人會被刪除。我對這個話題一無所知,所以我不能確定它是否是低質量的,但我建議你添加一個小段落,說明與你的代碼和OP的帖子有什麼不同。最好解釋爲什麼這個工作,另一個不工作。 –

-1

我想你可能你的參數之前,需要一個空間:

Query query1 = session.createQuery("select c.email from Contact c where c.contactNo = :contactNo"); 
query.setInteger("contactNo", 22); 
+0

沒有幫助.... –