2017-04-19 131 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]参数找到查询的部分。

相关问题