Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate无法找到命名参数,即使它存在_Java_Hibernate_Hql_Named Parameters - Fatal编程技术网

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

Java Hibernate无法找到命名参数,即使它存在,java,hibernate,hql,named-parameters,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总是抛出那个异常?即使参数存在?尝

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总是抛出那个异常?即使参数存在?

尝试使用
hql

"from UserProfile where firstName LIKE '%' || :name || '%'"
或使用
CONCAT

"from UserProfile where firstName LIKE CONCAT('%', :name ,'%')"
    • 应该是这样的:

      Query query = sess().createQuery("from UserProfile where firstName LIKE :name")
                          .setParameter("name", "%"+name+"%");
      
      在您的例子中,
      ”:name“
      是Hibernate将搜索的实际字符串。如果需要一个真正的命名参数,则只需要
      :name

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


      请注意,如果您的值包含
      %
      ,并且希望它是一个实际的字母而不是通配符,则必须对其进行转义,这是转义器类的一个示例。

      我猜您不需要参数周围的配额,这可能会解决您的问题。字符串someName=“%”+name+“%”之间的区别是什么;和setParameter(“名称”、“%”+名称+“%”);和setParameter(“name”,someName)??Hibernate只是不知道有一个命名参数,它不知道%:blah语法。在SQL中也是如此,如果您试图像“%”那样编写,它将无法正确识别它。如果您有:name-这是一个明确命名的参数,您将%blah指定为数据库应查找的字符串。如果你有%作为一个值,你将不得不逃避它。它最终起作用了。我只是想了解它们之间的区别,关于这个问题的更多信息有没有链接?我试图在实际答案中更详细地描述这一点。对不起,我没有任何特别的链接可以分享。