【问题标题】:I have expired problems with LikeExpression in hibernate(hibernate 3.5.5)我在休眠(休眠 3.5.5)中的 LikeExpression 问题已过期
【发布时间】:2011-04-01 13:21:07
【问题描述】:

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

【问题讨论】:

    标签: java hibernate detachedcriteria


    【解决方案1】:

    尝试ilike("caption", "Вход", MatchMode.ANYWHERE) 而不是like(..).ignoreCase()

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

    【讨论】:

      【解决方案2】:

      试试Restrictions.ilike 而不是Restrictions.like

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-17
          • 1970-01-01
          • 2010-11-20
          • 2021-02-25
          • 2018-07-30
          相关资源
          最近更新 更多