2010-05-11 26 views
6

我有一個列可能有一些不好的數據,我不能清理它,所以我需要檢查null或空字符串。我在做一個Hibernate條件查詢,所以我已經得到了返回不正確,現在的情況如下:hibernate如何使用空字符串進行平等限制?

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

我不能得到正常返回我期望的結果。因此,作爲一個實驗,我改變了第二個限制爲:

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

,它開始返回了預期的效果,所以是休眠錯誤翻譯我的空字符串(如「」)到一個SQL空字符串(例如「」) ,還是我只是做錯了?

+0

哪些是您使用的數據庫 - 空字符串有不同在不同的DBS行爲 – Mark 2010-05-11 18:00:23

回答

4

隨着HSQL(和德比)和以下值:

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

您的條件查詢

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

回報:

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

正如預期的那樣。

您使用的數據庫是?它可能是甲骨文?

2

這似乎是你做錯了。 null在Java中映射到NULL在SQL和Java中空字符串("")映射到空字符串的SQL(''

相關問題