web-dev-qa-db-fra.com

Insensible à la casse équivaut à utiliser les critères de mise en veille prolongée

J'ai vu Restrictions.ilike ('propriété', '% valeur%'), mais j'aimerais générer du SQL comme: lower (propriété) = 'valeur'. Des idées?

J'ai utilisé:

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

puisque Expression est obsolète. SimpleExpression appellera toLowerCase () sur la valeur, il n'est donc pas nécessaire de le faire au préalable.

Voir: source SimpleExpression

61
jon077

Faites attention à utiliser ilike car cela permettrait à quelqu'un d'entrer des choses comme "test%" et de faire correspondre. J'utilise ce qui suit pour faire un égal insensible à la casse dans une application:

...
Criteria crit=session.createCriteria(Event.class);
crit.add(Expression.eq("rsvpCode","test1").ignoreCase());
...
69

L'expression est désormais obsolète. Utilisez plutôt des restrictions ...

crit(Restrictions.eq("firstName", firstName).ignoreCase());
74
Andy A

Comme le suggère la réponse d'Andy, cela pour les recherches non sensibles à la casse, mais cela fonctionne également jusqu'à la version Hibernate 4.1:

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

Versions 4.1.1 et ultérieures d'Hibernate ne prend pas en charge la méthode ignoreCase() sur Restriction.eq(). Pour cela, nous devons utiliser ilike avec MatchMode.

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

Par exemple, pour une entité UTILISATEUR avec les propriétés id, nom, nom, une recherche non sensible à la casse basée sur le nom sera :

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

Cela retournera tous les résultats, insensible à la casse.

13
Satyam Koyani

Je ne suis pas absolument sûr, mais lorsque vous utilisez Restriction.eq, vous obtenez un objet SimpleExpression, et cet objet prend en charge une opération ignoreCase () que je n'ai jamais essayé d'utiliser, mais cela pourrait faire une différence.

Félicitations à Hibernate pour ne pas avoir documenté ce que fait réellement cette méthode.

7
Uri

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

Cela retourne un SimpleExpression Object Mais il génère une requête lower(firstname). Donc ça marche.

0
Mohd Kose Avase