hibernate如何使用空字符串进行平等限制? [英] How does hibernate use an empty string for an equality restriction?

查看:205
本文介绍了hibernate如何使用空字符串进行平等限制?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个列可能有一些不好的数据,我无法清理它,所以我需要检查空字符串或空字符串。我正在做一个Hibernate Criteria查询,所以我现在有下面的返回错误:

  Session session = getSessionFactory( ).openSession(); 
Transaction tx = session.beginTransaction();
条件myCriteria = session.createCriteria(Object);
...
myCriteria.add(Restrictions.or(Restrictions.isNull(stringColumn),
Restrictions.eq(stringColumn,)));
列出<物件> list = myCriteria.list();

我无法正确地返回我期望的结果。因此,作为实验,我将第二个限制改为:

  Restrictions.eq(stringColumn,'')

它开始返回预期的结果,所以hibernate错误地将我的空字符串(例如)一个SQL空字符串(例如''),还是我只是做错了?

解决方案

使用HSQL(和Derby)和以下值:

 
插入FOO值(1,'foo');
插入FOO值(2,'bar');
插入FOO值(3,NULL);
插入FOO值(4,'');

您的标准查询

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

正如预期的那样。

您使用的是哪个数据库?它可能是甲骨文?


I have a column that potentially has some bad data and I can't clean it up, so I need to check for either null or empty string. I'm doing a Hibernate Criteria query so I've got the following that returns incorrectly right now:

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();

I can't get it to properly return the results I'd expect. So as an experiment I changed the second restriction to read:

 Restrictions.eq("stringColumn", "''") 

And it started returning the expected results, so is hibernate incorrectly translating my empty string (e.g. "") into a SQL empty string (e.g. ''), or am I just doing this wrong?

解决方案

With HSQL (and Derby) and the following values:

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();

returns:

Foo [id=3, name=null]
Foo [id=4, name=]

As expected.

What database are you using? Could it be Oracle?

这篇关于hibernate如何使用空字符串进行平等限制?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆