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%"));
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.
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(?)
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
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%"));