2011-03-01 29 views
21

Criteria API de Hibernate tiene Restrictions.ilike función que tiene el siguiente contrato:Diferencia entre Restrictions.like y .ilike en Hibernate API Criterios

A entre mayúsculas y minúsculas "me gusta", similar al operador de iLike Postgres

Eso es genial. Pero la misma clase también tiene like función, que tiene un contrato mucho más vaga:

Aplicar un "como" restricción a la propiedad denominada

ejemplo

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

Respuesta

11

El caso-sensibilidad de el operador like, en MySQL, depende del tipo de columnas y de su intercalación (ver http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html).

Hibernate es "solo" una capa en la parte superior de SQL. El contrato del operador similar es emitir un operador SQL like. Si desea que sea lo mismo para MySQL y PostgreSQL, elija los tipos y colaciones correctos en los esquemas de la base de datos. Pero Hibernate no puede hacer mágicamente que todas las bases de datos utilicen las mismas reglas.

Diseñe su aplicación, elija y diseñe su base de datos para que el comportamiento que observe sea el esperado.

PD: pero estoy de acuerdo en que el javadoc de Hibernate es ... perfectible.

+0

hace 'trabajo ilike' para MySQL? – mmcrae

+0

@mmcrae sí, debería funcionar. ¿Qué pasa cuando intentas usarlo? –

0

En PostgreSQL existe 'ILIKE' y los diferentes operadores 'como', Así mayúsculas y minúsculas en independiente de las propiedades de columna Esa es la razón de que esto sucede

-1

API Criterios de Hibernate tiene la función Restrictions.ilike que tiene la siguiente contrato :

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

Eso es genial. Pero la misma clase también tiene como función, que tiene un contrato mucho más vaga:

Apply a "like" constraint to the named property 

ejemplo

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%")); 
+0

¡La segunda línea de comentario en este ejemplo contradice la primera línea en esta respuesta! –

0

ilike estará haciendo una inferior de su valor de entrada, y una baja del valor de la columna, por ejemplo,

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

Cuestiones relacionadas