Java Hibernate无法找到命名参数,即使它存在
Hibernate不断检测Java Hibernate无法找到命名参数,即使它存在,java,hibernate,hql,named-parameters,Java,Hibernate,Hql,Named Parameters,Hibernate不断检测 org.hibernate.QueryParameterException: could not locate named parameter [name] 即使它存在。这是我的hql Query query = sess().createQuery("from UserProfile where firstName LIKE '%:name%'").setParameter("name", name); 为什么hibernate总是抛出那个异常?即使参数存在?尝
org.hibernate.QueryParameterException: could not locate named parameter [name]
即使它存在。这是我的hql
Query query = sess().createQuery("from UserProfile where firstName LIKE '%:name%'").setParameter("name", name);
为什么hibernate总是抛出那个异常?即使参数存在?尝试使用
hql
"from UserProfile where firstName LIKE '%' || :name || '%'"
或使用CONCAT
"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
- 应该是这样的:
Query query = sess().createQuery("from UserProfile where firstName LIKE :name")
.setParameter("name", "%"+name+"%");
在您的例子中,”:name“
是Hibernate将搜索的实际字符串。如果需要一个真正的命名参数,则只需要:name
因此,%
应作为:name
的值传递,Hibernate将用实际值替换:name
请注意,如果您的值包含
%
,并且希望它是一个实际的字母而不是通配符,则必须对其进行转义,这是转义器类的一个示例。我猜您不需要参数周围的配额,这可能会解决您的问题。字符串someName=“%”+name+“%”之间的区别是什么;和setParameter(“名称”、“%”+名称+“%”);和setParameter(“name”,someName)??Hibernate只是不知道有一个命名参数,它不知道%:blah语法。在SQL中也是如此,如果您试图像“%”那样编写,它将无法正确识别它。如果您有:name-这是一个明确命名的参数,您将%blah指定为数据库应查找的字符串。如果你有%作为一个值,你将不得不逃避它。它最终起作用了。我只是想了解它们之间的区别,关于这个问题的更多信息有没有链接?我试图在实际答案中更详细地描述这一点。对不起,我没有任何特别的链接可以分享。