IllegalArgumentException - 具有该名称[name]的参数不存在

时间:2017-04-19 13:37:22

标签: java hibernate jpa wicket

我对我的代码有一个查询:

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]]

相对列的名称是" name"而且我确定。其他查询似乎与此相同,并且它们工作正常。我不知道哪个是问题

2 个答案:

答案 0 :(得分:0)

看起来问题不在于您传入的名为“name”的参数的列名。 “idacc”看起来像是被正确抓住了。

所以这部分不起作用

  

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

尝试传入一个字符串,看看它是否与

类似
  

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

如果运行正常,则getFieldFilter函数

出错

答案 1 :(得分:0)

我解决了。问题是查询是由不同的方法组成的,因为它根据用户的输入而变化,并且在这种方法之一中,变量被严格实例化。因此JVM没有使用[name]参数找到查询的一部分。