4

ignorCaseでは動作しないようです。最初のアサートはtrueを返します。2番目-false。何か案は?

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 に答える