我在MySQL这样有两行
+---------+---------+ | foo | bar | +---------+---------+ | | NULL | | | | +---------+---------+
空字符串是空的""。
""
现在,我想同时获得它们。我在两列上都使用Criteria和Restrictions.eqOrIsNull(),但是它总是只返回一行。
Criteria
Restrictions.eqOrIsNull()
代码是这样的
criteria.add(Restrictions.eqOrIsNull("foo", "")); .add(Restrictions.eqOrIsNull("bar", ""));
当我仅在上添加条件时foo,它将返回两行。但是对于bar,它仅返回第二个,它为空。
foo
bar
该javadoc的说,Apply an "equal" constraint to the named property. If the value is null, instead apply "is null".所以我会收到这个错误,还是应该以其他方式使用?
Apply an "equal" constraint to the named property. If the value is null, instead apply "is null".
更新 : 对不起,我好粗心。该文件清楚地说明了这一点。此方法根据value传递给它的方法工作,而不是存储在DB中的命名属性的实际值。Github 上的源代码:
value
public static Criterion eqOrIsNull(String propertyName, Object value) { return value == null ? isNull( propertyName ) : eq( propertyName, value ); }
因此,就我而言,eqOrIsNullreturn eq("")。我本该eq和isNullGregory回答一样使用and的。
eqOrIsNull
eq("")
eq
isNull
检查此代码是否满足您的要求-
criteria.add(Restrictions.or(Restrictions.eq("foo", ""), Restrictions.isNull("foo"))) .add(Restrictions.or(Restrictions.eq("bar", ""), Restrictions.isNull("bar")));
该代码段使用了Hibernate 3.5.0-CR-2 API。