【问题标题】:Hibernate could not locate named parameter even if it exist即使存在,Hibernate 也无法找到命名参数
【发布时间】: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总是抛出这个异常?即使参数存在?

【问题讨论】:

  • 我猜你不需要那些围绕参数的配额,这可能会解决你的问题。

标签: java hibernate hql named-parameters


【解决方案1】:

尝试使用hql 连接它

"from UserProfile where firstName LIKE '%' || :name || '%'"

或使用CONCAT

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

【讨论】:

    【解决方案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 指定为数据库应该查找的字符串。如果您有 % 作为值,则必须对其进行转义。
    • 它终于奏效了,我只是想了解它们的区别,有任何链接可以获取有关此问题的更多信息吗?
    • 我试图在实际答案中更详细地描述这一点。抱歉,我没有任何特定链接要分享。
    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2017-11-21
    • 2017-08-06
    • 2017-12-30
    • 2022-07-21
    • 2019-10-31
    • 1970-01-01
    相关资源
    最近更新 更多