如何在hibernate中使用LIKE表达式进行不区分大小写的过滤?
我的hibernate文件中的相应条目是:
<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>
答案 0 :(得分:4)
试试这个
<filter name="applicantNameFilter" condition="first_name ILIKE :nameFilter"/>
或
<filter name="applicantNameFilter" condition="UPPER(first_name) LIKE UPPER(:nameFilter)"/>
供参考
使用ILIKE:
SELECT * FROM sometable WHERE textfield ILIKE 'value%';
使用Regexp运算符(请参阅文档中的函数和运算符):
SELECT * FROM sometable WHERE textfield ~* 'value';
使用UPPER()或LOWER()在比较前更改字段的大小写; 这种方法可能比1)或2)更好,因为这些功能可能是 索引,因此如果您正在进行“开始”或“完全匹配”搜索 您的查询可能会编入索引:
SELECT * FROM sometable WHERE UPPER(textfield) LIKE (UPPER('value') || '%');
如果您的大部分搜索都是“在任何地方”搜索大文本 我想看一下两个“全文搜索”工具 PostgreSQL,一个在你的来源/ contrib中,第二个来自openFTS.org。
这是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