У меня истекли проблемы с LikeExpression в спящем режиме (hibernate 3.5.5) - PullRequest
4 голосов
/ 01 апреля 2011

Похоже, он не работает с ignorCase. Первое утверждение возвращает истину. Второе - ложь. Есть идеи?

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 ]

2 голосов
/ 01 апреля 2011

Попробуйте ilike("caption", "Вход", MatchMode.ANYWHERE) вместо like(..).ignoreCase()

http://www.dil.univ -mrs.fr / ~ massat / Docs / спящий режим-3,1 / апи / орг / спящий режим / критерий / Restrictions.html

1 голос
/ 01 апреля 2011

В большинстве баз данных (кроме Postgres) Hibernate выполняет без учета регистра like как lower(caption) like ?, где ? - результат "%Вход%".toLowerCase(). Как видите, в вашем случае он может выдавать false только в том случае, если результаты базы данных lower() не соответствуют результатам String.toLowerCase(). Это может произойти, например, если конфигурация языкового стандарта базы данных не поддерживает преобразование регистра для символов кириллицы.

1 голос
/ 01 апреля 2011

Попробуйте Restrictions.ilike вместо Restrictions.like.

...