如何指定由通配符包围的JPA命名参数?

Reu*_*aul 45 java hibernate jpa named-parameters

我如何指定JPA查询,如:

Query q = 
  em.createQuery(
    "SELECT x FROM org.SomeTable x WHERE x.someString LIKE '%:someSymbol%'"
  );
Run Code Online (Sandbox Code Playgroud)

其次是:

q.setParameter("someSymbol", "someSubstring");
Run Code Online (Sandbox Code Playgroud)

而不是触发一个

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

非常感激!

mus*_*iKk 73

怎么样

Query q = 
  em.createQuery(
    "SELECT x FROM org.SomeTable x WHERE x.someString LIKE :someSymbol"
);
q.setParameter("someSymbol", "%someSubstring%");
Run Code Online (Sandbox Code Playgroud)

我很确定我曾经这样解决过你的问题.


xti*_*ian 39

作为参考,您也可以使用CONCAT:

like CONCAT('%', :someSymbol, '%')
Run Code Online (Sandbox Code Playgroud)

  • 这应该是一个公认的解决方案。它也可以在sprint-data之类的框架中使用,其中可以使用@Query注释声明查询。 (2认同)
  • 或者 Oracle SQL 的“CONCAT('%', CONCAT(:someSymbol, '%'))” (2认同)