在Hibernate中如何使用LIKE表達式進行caseinsensitive fitering。 在我的休眠文件中的相關條目休眠 - LIKE表達式適用於大小寫不敏感
<filter name="applicantNameFilter" condition="first_name LIKE :nameFilter"/>
在Hibernate中如何使用LIKE表達式進行caseinsensitive fitering。 在我的休眠文件中的相關條目休眠 - 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 textfield ILIKE 'value%';
使用正則表達式運算符(見在docs函數和操作符):
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();
你可以嘗試使用的~*
代替LIKE
。前者不區分大小寫的模式匹配(並且是特定於PostgreSQL的)。
欲瞭解更多信息,請參閱手冊:http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-TABLE
<濾波器名稱= 「applicantNameFilter」 條件= 「first_name的:nameFilter」/>我試圖與此。但沒有奏效。 – 1355 2012-07-17 09:04:40
現在我收到以下錯誤消息。我的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
替換?與實際值,並嘗試直接在postgres控制檯執行此查詢。 – 2012-07-17 09:55:19
我對hibernate很新。我不知道該把它放在哪裏。你在哪裏申請第三個選項 – 1355 2012-07-17 09:55:24