sql - hibernate 如何使用空字符串进行相等限制?

标签 sql hibernate criteria

我有一列可能有一些坏数据,我无法清理它,所以我需要检查空字符串或空字符串。我正在做一个 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/

相关文章:

sql - 之前 ROW 值的 SUM

Java Hibernate @OneToMany 标准投影返回 NULL

java - hibernate spring简单单元测试读取数据。 findAll() 无法引用

java - Hibernate:有没有办法自动将 native SQL 结果转换为自定义对象?

symfony1 - 如何使用 symfony 和 propel 执行 "Select count..."?

java - Hibernate 标准加入

java - Hibernate 按内部 bean 的属性排序?

sql - Crystal 报表 : Boolean Issues

jquery - 如何在新闻源中加载更多帖子而不加载之前加载的帖子?

mysql - 表名中带有 [ 的 sql 错误