2010-05-11 5 views
6

Tengo una columna que potencialmente tiene algunos datos incorrectos y no puedo limpiarla, por lo que debo verificar si hay cadena vacía o nula. Estoy haciendo una consulta Criterios de hibernación, así que tengo los siguientes que devuelve incorrectamente en este momento:¿Cómo hibernate usa una cadena vacía para una restricción de igualdad?

Session session = getSessionFactory().openSession(); 
Transaction tx = session.beginTransaction(); 
Criteria myCriteria = session.createCriteria(Object); 
... 
myCriteria.add(Restrictions.or(Restrictions.isNull("stringColumn"), 
           Restrictions.eq("stringColumn", ""))); 
List<Objects> list = myCriteria.list(); 

no puedo conseguirlo para volver adecuadamente los resultados que cabe esperar. Así como un experimento cambié la segunda restricción para leer:

Restrictions.eq("stringColumn", "''") 

y comenzó a devolver los resultados esperados, por lo que es de hibernación de forma incorrecta la traducción de mi cadena vacía (por ejemplo, "") en una cadena vacía SQL (por ejemplo '') ¿O solo estoy haciendo esto mal?

+0

Qué base de datos se está utilizando - cadenas vacías han comportamiento en diferentes DBS diferentes – Mark

Respuesta

4

Con HSQL (y Derby) y los siguientes valores:

 
insert into FOO values (1, 'foo'); 
insert into FOO values (2, 'bar'); 
insert into FOO values (3, NULL); 
insert into FOO values (4, ''); 

Usted criterios de consulta

Criteria crit = session.createCriteria(Foo.class); 
crit.add(Restrictions.or(Restrictions.isNull("name"), 
         Restrictions.eq("name", ""))); 
crit.list(); 

rendimientos:

Foo [id=3, name=null] 
Foo [id=4, name=] 

como se esperaba.

¿Qué base de datos está utilizando? ¿Podría ser Oracle?

2

Parece que lo estás haciendo mal. null en Java mapas a NULL en SQL, y la cadena vacía ("") en Java mapas de cadena vacía en SQL ('')

Cuestiones relacionadas