4 Stimmen

Ich habe abgelaufene Probleme mit LikeExpression in hibernate (hibernate 3.5.5)

Sieht so aus, als ob es nicht mit ignorCase funktioniert. Die erste Assert gibt true zurück. Die zweite - falsch. Irgendwelche Ideen?

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);

2voto

Ralph Punkte 114913

Essayer ilike("caption", "", MatchMode.ANYWHERE) anstelle von like(..).ignoreCase()

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

1voto

mindas Punkte 25933

Essayer Restrictions.ilike anstelle von Restrictions.like .

1voto

axtavt Punkte 233070

Bei den meisten Datenbanken (außer Postgres) führt Hibernate die Groß-/Kleinschreibung nicht aus. like als lower(caption) like ? , wobei ? ist ein Ergebnis von "%%".toLowerCase() . Wie Sie sehen können, kann es in Ihrem Fall zu folgenden Ergebnissen führen false nur wenn Ergebnisse der Datenbank lower() sind unvereinbar mit den Ergebnissen von String.toLowerCase() . Das kann zum Beispiel passieren, wenn die Konfiguration des Gebietsschemas der Datenbank die Groß-/Kleinschreibung für kyrillische Zeichen nicht unterstützt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X