62 votes

Égaux insensibles à la casse selon les critères Hibernate

J'ai vu des Restrictions.ilike('propriété', '%value%'), mais souhaitez générer le SQL comme: inférieure(propriété) = "valeur". Des idées?

J'ai utilisé:

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

depuis, l'Expression est obsolète. Le SimpleExpression appellera toLowerCase() sur la valeur, de sorte qu'il n'est pas nécessaire de le faire à l'avance.

Voir: SimpleExpression source

79voto

Andy A Points 1032

L'expression est maintenant obsolète. Utilisez plutôt des restrictions ...

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

73voto

John Wagenleitner Points 6206

Faites attention à ne pas utiliser ilike car cela permettrait à quelqu'un d'entrer des informations telles que "test%" et de correspondance. J'utilise ce qui suit pour faire une égalité insensible à la casse dans une application:

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

14voto

Satyam Koyani Points 925

Que répondre à de andy dire non à la casse de la recherche, mais c'est aussi travailler jusqu'à 4.1

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

En 4.1.1 et, plus tard, la version d'hibernate supporte pas ignorecase() la méthode de l'égalité de restriction.Pour cela, nous devons utiliser ilike avec mathcmode.

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

Comme un exemple,Nous avons UTILISATEUR entité avec id,nom,nom de famille de la propriété et de la nous voulons de la casse de la recherche basée sur le nom de critères puis sera comme

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

Cela donnera tous les résultats sans comparaison de cas.

7voto

Uri Points 50687

Je n'en suis pas absolument sûr, mais lorsque vous utilisez Restriction.eq, vous obtenez un objet SimpleExpression, qui suppporte une opération ignoreCase () que je n'ai jamais essayée, mais qui pourrait faire une différence.

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

-1voto

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

Cela renvoie une requête SimpleExpression Object mais génère une requête lower(firstname) . Donc ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X