具有该名称 [userName] 的参数不存在

mma*_*ran 5 hibernate jpa

我有这个 Hibernate/JPA 代码:

List<User> users = getEntityManager().createQuery("from com.xxx.xxx.persistence.model.User where name    = :userName")
    .setParameter("userName", name.toLowerCase())
    .getResultList();
Run Code Online (Sandbox Code Playgroud)

但我收到此异常:

 java.lang.IllegalArgumentException: Parameter with that name [userName] did not exist
    at org.hibernate.jpa.spi.BaseQueryImpl.findParameterRegistration(BaseQueryImpl.java:487)
    at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:638)
    at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:163)
    at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:32)
Run Code Online (Sandbox Code Playgroud)

如果我在 SQL 中对 userName 进行硬编码,删除 setParamter,它就可以工作。怎么了?

小智 8

对于寻找其他解决方案的人,请检查您是否没有在参数后放置分号(例如,如果您复制本机查询)。

例子:

Query query = getEm().createNativeQuery("Select * from a where a.id = :id;");
query.setParameter("id", 1);
Run Code Online (Sandbox Code Playgroud)

这行不通,因为它会查找参数“id”,但您的实际参数名称是“id;”。