Java 从HQL获取具有特殊字符的数据
我有一个搜索功能,是在我当前的项目上实现的,我正在使用HQL的repo方法-一切都很好,除了搜索特殊字符,因为某些原因HQL没有转义它Java 从HQL获取具有特殊字符的数据,java,spring,hibernate,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]
@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])uxyz]HU.xlsx
调试步骤
在发送到Repo之前-我确实用以下字符替换了所有特殊字符-newsearchString是传递给Repo的字符
String newsearchString = searchString.replaceAll("(?=[]\\[+&|!(){}^\"~*?:\\\\_]) ", "/");
我也尝试过,没有替换特殊字符-它不会被返回
如何在HQL中转义字符?HQL没有现成的正则表达式。您必须修改特定数据库的方言才能添加该功能。() 如果您只是尝试将like与
%
通配符一起使用,则可以执行以下操作:
String itemNm = "abc_xyz(YYYYMM[t-2]-YYYYMM[t-1])_[xyz]HU.xlsx";
Query q = session.createQuery("from Item where itemNm like :itemNm ";
q.setString("itemNm","%"+itemNm+"%");
这是你问题的解决方案……它应该能满足你的需要 1) 查找并替换所有转义字符,并替换为“\\” 示例:[hi]\u mysearch应该像\\[hi\\]\u 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);