Hibernate - 用于不区分大小写的过滤的LIKE表达式

时间:2012-07-17 08:53:31

标签: hibernate filtering sql-like

如何在hibernate中使用LIKE表达式进行不区分大小写的过滤?

我的hibernate文件中的相应条目是:

<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>

2 个答案:

答案 0 :(得分:4)

试试这个

<filter name="applicantNameFilter" condition="first_name ILIKE :nameFilter"/>

<filter name="applicantNameFilter" condition="UPPER(first_name) LIKE UPPER(:nameFilter)"/>

供参考

  1. 使用ILIKE:

    SELECT * FROM sometable WHERE textfield ILIKE 'value%';    
  2. 使用Regexp运算符(请参阅文档中的函数和运算符):

    SELECT * FROM sometable WHERE textfield ~* 'value';
  3. 使用UPPER()或LOWER()在比较前更改字段的大小写; 这种方法可能比1)或2)更好,因为这些功能可能是 索引,因此如果您正在进行“开始”或“完全匹配”搜索 您的查询可能会编入索引:

    SELECT * FROM sometable WHERE UPPER(textfield) LIKE (UPPER('value') || '%');
  4. 如果您的大部分搜索都是“在任何地方”搜索大文本 我想看一下两个“全文搜索”工具 PostgreSQL,一个在你的来源/ contrib中,第二个来自openFTS.org。

  5. 这是java代码

    用户标准为

    Criteria criteria = getSession().createCriteria(Person.class);
    criteria.add(Restrictions.ilike("first_name", first_name, MatchMode.ANYWHERE));
    criteria.list();
    

答案 1 :(得分:1)

您可以尝试使用~*代替LIKE。前者使用不区分大小写的模式匹配(并且特定于PostgreSQL)。

有关详细信息,请参阅手册:http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-TABLE