我有一列可能有一些坏数据,我无法清理它,所以我需要检查空字符串或空字符串。我正在做一个 Hibernate Criteria 查询,所以我现在有以下错误返回:
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", "''")
它开始返回预期的结果,所以 hibernate 是否错误地将我的空字符串(例如“”)转换为 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, '');
You criteria query
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=]
正如预期的那样。
你用的是什么数据库?会不会是甲骨文?
关于sql - hibernate 如何使用空字符串进行相等限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813138/