2012-07-17 50 views

回答

3

试试这个

<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. 使用正则表达式运算符(见在docs函数和操作符):

    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。

这是Java代码

用户准则为

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

现在我收到以下错误消息。我的eclipse控制台.. 'this_.first_name this_.ILIKE? 和this_.short_list_flag =? 和user4_.user_id =? org.hibernate.exception.SQLGrammarException:无法执行查询.......导致:org.postgresql.util.PSQLException:错误:语法错误处于或接近“this_” 位置:3314' – 1355 2012-07-17 09:53:43

+0

替换?与实际值,并尝试直接在postgres控制台执行此查询。 – 2012-07-17 09:55:19

+0

我对hibernate很新。我不知道该把它放在哪里。你在哪里申请第三个选项 – 1355 2012-07-17 09:55:24