java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值

时间:2013-11-19 19:57:46

标签: jpa parameters derby named-query

我有以下命名查询:

@NamedQuery(
    name = "Userdetails.findByUsername", 
    query = "SELECT u FROM Userdetails u WHERE u.username = :username"
)

当我尝试按如下方式执行时:

getEntityManager()
    .createNamedQuery("Userdetails.findByUsername")
    .setParameter("string", "%" + string + "%")
    .getResultList();

然后我得到以下异常:

  

java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值SELECT u FROM Userdetails u WHERE u.username =:username。

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:7)

Userdetails.findByUsername命名查询中,您有一个名为username的命名参数:

SELECT u FROM Userdetails u WHERE u.username = :username

然后使用实体管理器调用它,但设置string参数:

getEntityManager()
    .createNamedQuery("Userdetails.findByUsername")
    .setParameter("string", "%" + string + "%") //<-- check here
    .getResultList();

将此string参数替换为username

getEntityManager()
    .createNamedQuery("Userdetails.findByUsername")
    .setParameter("username", "%" + string + "%") //<-- check here
    .getResultList();