2017-04-19 129 views
-1

我有我的代碼這個查詢:拋出:IllegalArgumentException - 參數與該名稱(姓名)不存在

return Long.parseLong(getEntityManager().createQuery(
"SELECT COUNT(a) FROM ApartmentExtraType a WHERE a.accommodation.id = :idacc AND (LOWER(a.name) LIKE :name)", 
Long.class) 
.setParameter("idacc", accommodation.getId()) 
.setParameter("name", "%" + filterQuery.getFieldFilter("name").toString().toLowerCase() + "%") 
getSingleResult().toString()); 

如果查詢沒有找到任何元素我沒有問題,但如果它發現在至少有一個元素,我有這個錯誤:

Last cause: Parameter with that name [name] did not exist WicketMessage: Error attaching this container for rendering: 
[WebMarkupContainer [Component id = tbody]] 

相對列的名稱是「名稱」,我敢肯定。其他查詢似乎是相同的這一個,他們工作得很好。我不知道哪個是問題

回答

0

看起來問題不在列名稱中,而是與傳入的參數名稱「名稱」。 「idacc」看起來像是被正確抓住了。

因此,這部分是不工作

filterQuery.getFieldFilter("name").toString().toLowerCase()

嘗試傳遞一個字符串,並看看是否能工程像

.setParameter("name", "ExampleName");

如果運行得很好,那麼有什麼不對的getFieldFilter功能

+0

我控制如果問題是getFieldFilter,但我不這麼認爲,因爲syste.out打印正確的字符串。 –

0

我解決了。問題在於查詢由不同的方法組成,因爲它根據用戶的輸入而有所不同,並且在此方法之一中變量被嚴重實例化。所以JVM沒有用[name]參數找到查詢的部分。

相關問題