如何在休眠中使用 LIKE 表达式进行不区分大小写的过滤?
我的休眠文件中的相应条目是:
<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>
试试这个
<filter name="applicantNameFilter" condition="first_name ILIKE :nameFilter"/>
或者
<filter name="applicantNameFilter" condition="UPPER(first_name) LIKE UPPER(:nameFilter)"/>
以供参考
使用 ILIKE:
SELECT * FROM sometable WHERE 文本字段 ILIKE 'value%';
使用正则表达式运算符(请参阅文档中的函数和运算符):
SELECT * FROM sometable WHERE textfield ~* 'value';
在比较之前使用 UPPER() 或 LOWER() 更改字段的大小写;这种方法可能比 1) 或 2) 更好,因为这些函数可能会被索引,因此如果您正在执行“开始于”或“完全匹配”搜索,您的查询可能会被索引:
SELECT * FROM sometable WHERE UPPER(textfield) LIKE (UPPER('value') || '%');
如果您的大多数搜索是对大型文本字段的“字段中的任何位置”搜索,我建议您查看 PostgreSQL 中可用的两个“全文搜索”工具,一个在您的源代码的 /contrib 中,第二个来自 openFTS。组织。
这是java代码
用户标准为
Criteria criteria = getSession().createCriteria(Person.class);
criteria.add(Restrictions.ilike("first_name", first_name, MatchMode.ANYWHERE));
criteria.list();
您可以尝试使用~*
而不是LIKE
. 前者进行不区分大小写的模式匹配(并且是 PostgreSQL 特定的)。
有关更多信息,请参阅手册:http ://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-TABLE