2011-04-01 44 views
4

看起來它不適用於ignorCase。 第一個斷言返回true。第二 - 錯誤。有任何想法嗎?我在休眠(Hibernate 3.5.5)中使用LikeExpression過期了問題

EntityManager entityManager = (EntityManager) applicationContext.getBean("entityManager"); 
HibernateTemplate hibernateTemplate = entityManager.getHibernateTemplate(); 
int size = hibernateTemplate.find("from Source where caption like '%Вход%'").size(); 
System.out.println("By Query: " + size); 
assertTrue(size > 0); 

DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Source.class); 
detachedCriteria.add(Restrictions.like("caption", "Вход", MatchMode.ANYWHERE).ignoreCase()); 
List list = hibernateTemplate.findByCriteria(detachedCriteria); 
System.out.println("By DC: " + list.size()); 
assertTrue(list.size() > 0); 
+0

你使用哪個數據庫? – axtavt 2011-04-01 13:36:33

回答

1

嘗試Restrictions.ilike而不是Restrictions.like

1

在大多數數據庫(Postgres除外)中,Hibernate執行不區分大小寫的like作爲lower(caption) like ?,其中?"%Вход%".toLowerCase()的結果。正如你所看到的,在你的情況下,只有在數據庫lower()的結果與String.toLowerCase()的結果不一致時,才能生成false。例如,如果數據庫區域設置配置不支持西里爾文字符的大小寫轉換,則可能發生這種情況。