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