2010-05-11 8 views
6

Ho una colonna che potenzialmente ha alcuni dati errati e non riesco a ripulirla, quindi ho bisogno di verificare la stringa vuota o vuota. Sto facendo una query Criteri Hibernate così ho ottenuto il seguente che restituisce in modo non corretto in questo momento:In che modo l'ibernazione utilizza una stringa vuota per una restrizione di uguaglianza?

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(); 

non posso farlo per restituire correttamente i risultati che ci si aspetta. Così come un esperimento ho cambiato la seconda restrizione di leggere:

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

Ed è iniziato restituzione dei risultati attesi, quindi è ibernazione in modo non corretto tradurre la mia stringa vuota (per esempio "") in una stringa vuota SQL (ad esempio '') o sto sbagliando?

+0

quale database si sta utilizzando - stringhe vuote hanno differenti comportamenti in diverse DBS – Mark

risposta

4

Con HSQL (e Derby) ei seguenti valori:

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

È criteri di query

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

rendimenti:

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

come previsto.

Che database stai utilizzando? Potrebbe essere Oracle?

2

Sembra che tu stia sbagliando. null in Java mappe per NULL in SQL, e stringa vuota ("") in Java mappe per stringa vuota in SQL ('')

Problemi correlati