如何使用Hibernate eqOrIsNull()

我在MySQL这样有两行

+---------+---------+

| foo | bar |

+---------+---------+

| | NULL |

| | |

+---------+---------+

空字符串是空的""

现在,我想同时获得它们。我在两列上都使用CriteriaRestrictions.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 );

}

因此,就我而言,eqOrIsNullreturn eq("")。我本该eqisNullGregory回答一样使用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

回到顶部