我有一个在当前项目中实现的搜索功能,我在回购方法中使用了HQL-一切正常,除了由于某些原因搜索特殊字符外,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
调试步骤
在发送到仓库之前,我确实将所有特殊字符替换为以下内容-newsearchString是传递给仓库的那个特殊字符
String newsearchString = searchString.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\_]) ", "/");
我也尝试过不替换特殊字符的情况-不会返回
如何在HQL中转义字符?
最佳答案
这是您的问题的解决方案...它应该可以满足您的需求。
1)查找并替换您所有的转义字符,并替换为“ \\”
示例:[hi] _mysearch应该替换为\\ [hi \\] _ mysearch
2)如下更改您的回购查询
@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/