hibernate如何使用空字符串进行平等限制? [英] How does hibernate use an empty string for an equality restriction?
问题描述
我有一个列可能有一些不好的数据,我无法清理它,所以我需要检查空字符串或空字符串。我正在做一个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屋!