即使存在,Hibernate也无法找到命名参数

时间:2013-01-24 12:12:28

标签: 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会一直抛出异常?即使参数存在?

2 个答案:

答案 0 :(得分:26)

应该是这样的:

Query query = sess().createQuery("from UserProfile where firstName LIKE :name")
                    .setParameter("name", "%"+name+"%");

在你的情况下,':name'是Hibernate将搜索的实际字符串。如果您需要一个真正的命名参数,则需要:name

因此,%应作为:name的值传递,而Hibernate会将:name替换为实际值。

请注意,如果您的值包含%,并且您希望它是一个实际的字母而不是通配符,则必须将其转义,here is一个escaper-class示例。

答案 1 :(得分:3)

尝试使用hql

连接它
"from UserProfile where firstName LIKE '%' || :name || '%'"

或使用CONCAT

"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"