2010-05-11 5 views
6

मेरे पास एक कॉलम है जिसमें संभावित रूप से कुछ खराब डेटा है और मैं इसे साफ़ नहीं कर सकता, इसलिए मुझे या तो शून्य या खाली स्ट्रिंग की जांच करनी है। मैं एक हाइबरनेट मानदंड क्वेरी कर रहा हूँ तो मैं निम्नलिखित कि गलत तरीके से अभी रिटर्न मिल गया है:समानता प्रतिबंध के लिए हाइबरनेट एक खाली स्ट्रिंग का उपयोग कैसे करता है?

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

एसक्यूएल में रिक्त स्ट्रिंग पर नक्शे जो डेटाबेस का उपयोग कर रहे - रिक्त स्ट्रिंग अलग डीबीएस में व्यवहार भिन्न है – Mark

उत्तर

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 एसक्यूएल में NULL के नक्शे, और खाली स्ट्रिंग ("") जावा में ('')

संबंधित मुद्दे