即使存在,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 也无法找到命名参数的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中带有命名查询的可选参数?

即使级联为 ALL,Hibernate 也无法持续存在

Spring Boot JPA Hibernate:即使实体类中存在@Id,也没有为实体错误指定标识符

保存文件时没有过早关机的可能性会破坏它

解决idea无法显示中文候选框问题

Python Pandas 合并(和连接)是不是无法通过后缀参数重命名列?