我有一个在当前项目中实现的搜索功能,我在回购方法中使用了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/

10-12 05:12