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()。非常感谢。我认为它现在可以工作了,我必须显示结果,但我想我现在需要一些睡眠!谢谢各位