当前位置: 首页 > 知识库问答 >
问题:

从HQL获取具有特殊字符的数据

郝君博
2023-03-14

我在我当前的项目中实现了一个搜索功能,我正在使用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中转义字符?

共有2个答案

马淇
2023-03-14

HQL没有现成的正则表达式。您必须修改特定数据库的方言才能添加该功能。(Oracle示例)

如果您只是尝试将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+"%");
张昊穹
2023-03-14

这是你问题的解决方案...它应该适合你的需要。

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);
 类似资料:
  • 我试图使用从数据库中获取值,但由于值包含特殊字符,因此出现异常。我无法找出原因。 下面是我正在尝试的代码: POJO如下所示:Hotel.java HotelMapping.java 查询字符串 查询=会话。createQuery(“来自HotelMapping hm,其中hm.hotelID.hotelName='“hotelName”'” 给出以下异常: 我试着避开撇号,但没有成功。我甚至尝试

  • 我有一个php变量,它的值从超文本标记语言形式设置。变量的值为 正如你所看到的,它有一个特殊的字母表(e_tilda)。 现在,当我回显x时,它给出以下信息: 我不知道如何呼应原来的名字。我尝试了函数,但它不起作用。在阅读时,我所理解的功能不适合我的情况。 谁能帮我一下吗。 提前感谢。Neeraj

  • 我目前正在开发一个解析器。我走在一棵树上,大部分是决定论的(我能找到的数值有限)。 通常在这些情况下,我会创建一个枚举,其中包含我希望找到的值的名称,如下所示: 在这种情况下,我可以通过以下方式检查字符串是否属于枚举: 问题是目前我和特殊角色一起工作({" 我想要的是将枚举与那些特殊的字符元素相关联,例如 并继续使用以下简单明了的方法: 目前,我在任何地方都使用枚举,但对于这些元素,我使用表。我想

  • 问题内容: 我打开 记事本 (Windows)并编写 并转到“ 另存为… ”“ someFile.txt”,并将“ 编码” 设置为 UTF-8 。 在Java中,我有 但是我得到问号和类似的“特殊”字符。为什么? 编辑: 我有此输入(.txt文件中的一行) 和这段代码 和 吐司 输出(用于那些谁不熟悉与Android,吐司只是一个显示弹出式屏幕,在它特定的文本法)的罚款。控制台显示“奇怪的字符”(

  • 这就是我获取XML响应的方式: 希望有人能帮我。我认为URLConnection或其中一个流需要设置为UTF-8,考虑到谷歌的响应也是用UTF-8编码的?!