即使存在,Hibernate 也无法找到命名参数
Posted
技术标签:
【中文标题】即使存在,Hibernate 也无法找到命名参数【英文标题】:Hibernate could not locate named parameter even if it exist 【发布时间】:2013-01-08 04:39:47 【问题描述】:Hibernate 不断检测
org.hibernate.QueryParameterException: could not locate named parameter [name]
即使它存在。这是我的总部
Query query = sess().createQuery("from UserProfile where firstName LIKE '%:name%'").setParameter("name", name);
为什么hibernate总是抛出这个异常?即使参数存在?
【问题讨论】:
我猜你不需要那些围绕参数的配额,这可能会解决你的问题。 【参考方案1】:尝试使用hql
连接它
"from UserProfile where firstName LIKE '%' || :name || '%'"
或使用CONCAT
"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
HQL CONCAT
【讨论】:
【参考方案2】:应该是这样的:
Query query = sess().createQuery("from UserProfile where firstName LIKE :name")
.setParameter("name", "%"+name+"%");
在您的情况下,':name'
是 Hibernate 将搜索的实际字符串。如果你需要一个真正的命名参数,你只需要:name
。
因此%
应该作为:name
的值传递,Hibernate 将用实际值替换:name
。
请注意,如果您的值包含 %
并且您希望它是一个实际的字母而不是通配符,则您必须对其进行转义,here is 是转义类的一个示例。
【讨论】:
String someName = "%"+name+"%"; 的区别是什么?和 setParameter("name", "%"+name+"%");和 setParameter("name", someName); ?? Hibernate 只是不承认有一个命名参数,它不知道 %:blah 语法。如果您尝试编写 LIKE '%?',在 SQL 中也是如此,它不会正确识别它。如果您有 :name - 这是一个明确命名的参数,并且您将 %blah 指定为数据库应该查找的字符串。如果您有 % 作为值,则必须对其进行转义。 它终于奏效了,我只是想了解它们的区别,有任何链接可以获取有关此问题的更多信息吗? 我试图在实际答案中更详细地描述这一点。抱歉,我没有任何特定链接要分享。以上是关于即使存在,Hibernate 也无法找到命名参数的主要内容,如果未能解决你的问题,请参考以下文章