看起来它不适用于ignorCase。 第一个断言返回true。第二 - 错误。任何想法?
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 :(得分:2)
尝试使用ilike("caption", "Вход", MatchMode.ANYWHERE)
代替like(..).ignoreCase()
http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/criterion/Restrictions.html
答案 1 :(得分:1)
尝试使用Restrictions.ilike
代替Restrictions.like
。
答案 2 :(得分:1)
在大多数数据库(Postgres除外)上,Hibernate对like
执行不区分大小写的lower(caption) like ?
,其中?
是"%Вход%".toLowerCase()
的结果。如您所见,只有当数据库false
的结果与lower()
的结果不一致时,它才能生成String.toLowerCase()
。例如,如果数据库区域设置配置不支持西里尔字符的大小写转换,则可能会发生这种情况。