我有一个在当前项目中实现的搜索功能,我将 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/