Jpa java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值
我有以下命名查询:Jpa java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值,jpa,parameters,derby,named-query,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"
@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:您试图使用查询字符串中不存在的字符串名称从Userdetails u中选择u,其中u.username=:username来设置参数值
这是如何导致的,我如何解决它?在您的
用户详细信息中。findByUsername
命名查询您有一个名为用户名的命名参数:
SELECT u FROM Userdetails u WHERE u.username = :username
getEntityManager()
.createNamedQuery("Userdetails.findByUsername")
.setParameter("username", "%" + string + "%") //<-- check here
.getResultList();
然后使用实体管理器调用它,但设置一个string
参数:
getEntityManager()
.createNamedQuery("Userdetails.findByUsername")
.setParameter("string", "%" + string + "%") //<-- check here
.getResultList();
这个错误信息似乎很清楚。我不知道你在寻求什么样的帮助。如果您有代码问题,您需要发布一些代码。请阅读错误。您的查询中可能有一个占位符:foo
,但正在尝试为:baz
或类似的内容绑定一个值。很抱歉,这是我的第一个这样的项目,使用这些技术,是什么导致了此错误,数据库中的字段只有ID和用户名,用户名是我试图返回的,我只是不明白如何解决这个问题。问题出在您的JPA代码中,来自您的上一个问题:。您有:username
作为命名参数,但在返回getEntityManager()中设置string
。createNamedQuery(“Userdetails.findByUsername”)。setParameter(“string”、“%”+string+“%”)。getResultList()代码>。非常感谢。我认为它现在可以工作了,我必须显示结果,但我想我现在需要一些睡眠!谢谢各位