我有以下命名查询:
@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。
这是如何引起的?如何解决?
答案 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();