Независимо от регистра равных с использованием критериев гибернации - PullRequest
60 голосов
/ 09 марта 2009

Я видел Restrictions.ilike ('property', '% value%'), но хотел бы сгенерировать SQL вроде: lower (property) = 'value' Есть идеи?

Я использовал:

Restrictions.eq("email", email).ignoreCase()

, поскольку Expression устарела. SimpleExpression вызовет toLowerCase () для значения, поэтому нет необходимости делать это заранее.

См .: Источник SimpleExpression

Ответы [ 5 ]

74 голосов
/ 11 октября 2012

Выражение теперь устарело. Вместо этого используйте ограничения ...

crit(Restrictions.eq("firstName", firstName).ignoreCase());
69 голосов
/ 09 марта 2009

Будьте осторожны при использовании ilike, потому что это позволит кому-то вводить такие слова, как «test%» и совпадать Я использую следующее, чтобы сделать равным регистр в одном приложении:

...
Criteria crit=session.createCriteria(Event.class);
crit.add(Expression.eq("rsvpCode","test1").ignoreCase());
...
11 голосов
/ 29 мая 2014

Как подсказывает ответ Энди, это для поиска без учета регистра, но оно также работает до версии Hibernate 4.1 :

crit(Restrictions.eq("firstName", firstName).ignoreCase());

Версии 4.1.1 и новее Hibernate не поддерживают метод ignoreCase() в Restriction.eq(). Для этого мы должны использовать ilike с MatchMode.

Criteria crit = session.createCriteria(ENTITY.class);
crit.add(Restrictions.ilike('PROPERTY NAME', 'VALUE', MatchMode.ANYWHERE));

Например, для объекта USER с id, именем, фамилией свойствами поиск без учета регистра по имени будет:

Criteria crit = session.createCriteria(USER.class);
crit.add(Restrictions.ilike('name', 'Satyam', MatchMode.ANYWHERE));

Это вернет все результаты без учета регистра.

7 голосов
/ 09 марта 2009

Я не совсем уверен, но когда вы используете Restriction.eq, вы получаете объект SimpleExpression, и этот объект поддерживает операцию ignoreCase (), которую я никогда не пытался использовать, но похоже, что она может иметь значение.

Благодарность Hibernate за то, что он не задокументировал, что этот метод на самом деле делает.

0 голосов
/ 15 ноября 2013

crit(Restrictions.eq("firstName", firstName).ignoreCase()); работает.

Это действительно возвращает SimpleExpression Object, но генерирует запрос lower(firstname). Так что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...