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

use*_*206 19 java hibernate hql named-parameters

Hibernate保持检测

org.hibernate.QueryParameterException: could not locate named parameter [name]
Run Code Online (Sandbox Code Playgroud)

即使它存在.这是我的hql

Query query = sess().createQuery("from UserProfile where firstName LIKE '%:name%'").setParameter("name", name);
Run Code Online (Sandbox Code Playgroud)

为什么hibernate不断抛出异常?即使参数存在?

Sta*_*sev 26

应该是这样的:

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

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

因此%应该作为值传递,:name并且Hibernate将替换:name为实际值.

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


Joh*_*Woo 5

尝试使用连接它hql

"from UserProfile where firstName LIKE '%' || :name || '%'"
Run Code Online (Sandbox Code Playgroud)

或使用CONCAT

"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
Run Code Online (Sandbox Code Playgroud)