当前位置:  开发笔记 > 编程语言 > 正文

使用SQL Server方言配置Hibernate以在LIKE子句中转义下划线

如何解决《使用SQLServer方言配置Hibernate以在LIKE子句中转义下划线》经验,为你挑选了1个好方法。

我有一个SQL SELECT查询,它有一个包含下划线的LIKE子句,它应该专门查找下划线,而不是将其视为通配符:

SELECT * FROM my_table WHERE name LIKE '_H9%';

我知道我可以将实际子句更改为'[_] H9%',以使其按预期工作,但问题是该子句是由Hibernate生成的.

有没有办法配置Hibernate以这种方式逃避所有查询中的所有下划线?如果失败了,有没有办法配置SQL Server(在我的情况下为2008)将下划线视为通配符?



1> Cowan..:

如果您正在使用Criteria创建查询,则可以使用其中一个接受"Character escapeChar"的受保护构造函数创建自己的表达式,该表达式使用org.hibernate.criterion.LikeExpression进行子类化,并为您替换值.假如说 '!' 是一个已知值,不会出现在任何搜索字符串中(您可以选择任何您喜欢的,我猜),您可以这样做:

public class EscapingLikeExpression extends LikeExpression {
  public EscapingLikeExpression(String propertyName, String value) {
      super(propertyName, escapeString(value), '!', false);
  }

  static String escapeString(String inputString) {
    inputString = inputString.replace("_", "!_");
    return inputString;
  }

}

如果没有这样的字符(不会在你的搜索值中显示为文字),那么添加以下作为escapeString()的第一行来逃避它们:

    inputString = inputString.replace("!", "!!");

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有