У меня есть столбец, который потенциально имеет некоторые неправильные данные, и я не могу очистить их, таким образом, я должен проверить или на пустую или на пустую строку. Я делаю Быть в спящем режиме запрос Критериев, таким образом, у меня есть следующий, который возвращается неправильно прямо сейчас:
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 (например,''), или я просто делаю эту несправедливость?
С 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?