4

看起来它不适用于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);
4

3 回答 3

2

尝试ilike("caption", "Вход", MatchMode.ANYWHERE)代替like(..).ignoreCase()

http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/criterion/Restrictions.html

于 2011-04-01T15:54:09.363 回答
1

在大多数数据库(Postgres 除外)上,Hibernate 不区分大小写like,因为lower(caption) like ?,其中?"%Вход%".toLowerCase(). 如您所见,在您的情况下,false只有当数据库lower()的结果与String.toLowerCase(). 例如,如果数据库区域设置不支持西里尔字符的大小写转换,就会发生这种情况。

于 2011-04-01T17:48:27.880 回答
1

尝试Restrictions.ilike代替Restrictions.like.

于 2011-04-01T15:55:28.333 回答