Différence entre les Restrictions.comme et.I like in Hibernate Criteria API

hibernationCriteria API a Restrictions.ilike la fonction qui a le contrat suivant:

A la casse "comme", similaire à Postgres ilike opérateur

c'est cool. Mais de la même classe a like fonction, ayant un contrat beaucoup plus vague:

Appliquer un "comme" contrainte à la propriété nommée

exemple

Criteria cr = session.createCriteria(Employee.class);

// To get records having fistName starting with zara
cr.add(Restrictions.like("firstName", "zara%"));

// Case sensitive form of the above restriction.
cr.add(Restrictions.ilike("firstName", "zara%"));
22
demandé sur Neil Stockton 2011-03-01 23:56:41

4 réponses

la sensibilité de cas de l'opérateur similaire, en MySQL, dépend du type de colonnes et de leur collation (voir http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html).

hibernation est "juste" une couche sur le dessus de SQL. Le contrat de l'opérateur similaire est d'émettre un opérateur de type SQL. Si vous voulez qu'il soit le même pour MySQL et PostgreSQL, alors choisissez les bons types et collations dans les schémas de base de données. Mais L'hibernation ne peut pas faire par magie tous les les bases de données utilisent les mêmes règles.

concevoir votre application, choisir et concevoir votre base de données de sorte que le comportement que vous observez est le comportement que vous attendez.

PS: mais je suis d'accord que le javadoc D'hibernation l'est... perfectible.

11
répondu JB Nizet 2011-03-01 22:02:57

ilike va faire un bas de votre valeur d'entrée, et une baisse de la valeur de la colonne par exemple,

select * from table where lower(column) like lower(?)

1
répondu Tom Chamberlain 2017-09-05 18:42:47

dans PostgreSQL il y a des opérateurs' J'aime 'et' J'aime ' différents, Donc la sensibilité de cas en indépendant des propriétés de colonne c'est la raison pour laquelle cette chose se produit

-1
répondu Charudatta 2012-07-02 04:56:06

critères D'hibernation L'API comporte des Restrictions.ilike fonction qui a le contrat suivant:

A case-insensitive "like", similar to Postgres ilike operator

c'est cool. Mais la même classe a aussi la même fonction, ayant un contrat beaucoup plus vague:

Apply a "like" constraint to the named property

exemple

Criteria cr = session.createCriteria(Employee.class);

// To get records having fistName starting with zara
cr.add(Restrictions.like("firstName", "zara%"));

// Case sensitive form of the above restriction.
cr.add(Restrictions.ilike("firstName", "zara%"));
-1
répondu Ch Pratap 2014-11-15 08:20:42