我在hibernate中使用LikeExpression已经过期(hibernate 3.5.5)

时间:2011-04-01 13:21:08

标签: java hibernate detachedcriteria

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

3 个答案:

答案 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()。例如,如果数据库区域设置配置不支持西里尔字符的大小写转换,则可能会发生这种情况。