java - 从 HQL 中获取带有特殊字符的数据

标签 java spring hibernate hql

我有一个在当前项目中实现的搜索功能,我将 HQL 用于 repo 方法 - 一切正常,除了由于某种原因 HQL 没有转义它而搜索特殊字符。

 @Query("SELECT f FROM Item f WHERE f.id=:id AND f.itemNm LIKE %:itemNm %")
 Item findByItemNm(@Param("itemNm ") String itemNm, @Param("id") Long id);

我发送的字符串搜索是

abc_xyz(YYYYMM[t-2]-YYYYMM[t-1])_[xyz]HU.xlsx

调试步骤

在发送到 Repo 之前 - 我确实用以下内容替换了所有特殊字符 -newsearchString 是被传递到 repo 的那个

String newsearchString = searchString.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\_])  ", "/");

我也试过不替换特殊字符-它没有被退回

如何在 HQL 中转义字符?

最佳答案

这是您问题的解决方案...它应该可以满足您的需要。

1) 查找并替换所有转义字符,并替换为“\\” 示例:[hi]_mysearch 应替换为 \\[hi\\]_mysearch

2) 像下面这样更改你的 repo 查询

 @Query("SELECT f FROM Item f WHERE f.id=:id AND f.itemNm LIKE %:itemNm % escape '\\'")
 Item findByItemNm(@Param("itemNm ") String itemNm, @Param("id") Long id);

关于java - 从 HQL 中获取带有特殊字符的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798651/

相关文章:

iMail 的 JavaMail API -- java.net.SocketException : Permission denied: connect

java - 将数据放在 csv 文件中的一行中

eclipse - 为什么在 Eclipse 中 Maven "Add Spring project Nature"之后必须始终是 "Update Project Configuration"?

java - 为什么这段代码在 netbeans 中抛出 ClassCastException 而在 eclipse 中运行良好

java - 如何在 Hibernate/JPA 中定义共享序列生成器?

java - 如何使用 Spring Data JPA 保存具有手动分配标识符的实体?

java - 安卓数据库的安全 key

java - sun.reflect.generics.reflectiveObjects.NotImplementedException 和 org.apache.commons.lang3.NotImplementedException 之间有什么区别

java - Spring Security 3.2.0.RC1 - <http> 元素和弃用的方法

java - 作为Java中的方法参数,问号允许你在Class<?>中做什么