Как действительно в спящем режиме, используют пустую строку для ограничения равенства?

У меня есть столбец, который потенциально имеет некоторые неправильные данные, и я не могу очистить их, таким образом, я должен проверить или на пустую или на пустую строку. Я делаю Быть в спящем режиме запрос Критериев, таким образом, у меня есть следующий, который возвращается неправильно прямо сейчас:

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 (например,''), или я просто делаю эту несправедливость?

6
задан user151019 11 May 2010 в 17:59
поделиться

1 ответ

С HSQL (и Derby) и следующими значениями:

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=]

Как и ожидалось.

Какую базу данных вы используете? Может ли это быть Oracle?

4
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: