gpt4 book ai didi

java - 如何使用 Hibernate eqOrIsNull()

转载 作者:可可西里 更新时间:2023-11-01 06:33:16 25 4
gpt4 key购买 nike

我在 MySQL 中有两行是这样的

+---------+---------+
| foo | bar |
+---------+---------+
| | NULL |
| | |
+---------+---------+

空的地方是空字符串""

现在我想得到他们两个。我在两列上都使用了 CriteriaRestrictions.eqOrIsNull(),但它总是只返回一行。

代码是这样的

criteria.add(Restrictions.eqOrIsNull("foo", ""));
.add(Restrictions.eqOrIsNull("bar", ""));

当我仅在 foo 上添加条件时,它会返回两行。但是对于 bar,它只返回第二个,它是空的。

javadoc说, 对命名属性应用“相等”约束。如果该值为 null,则应用“is null”。 那么我是不是理解错了,还是应该以其他方式使用它?

更新:
对不起,我太粗心了。该文档清楚地说明了这一点。此方法根据传递给它的 value 工作,而不是存储在数据库中的命名属性的实际值。
Github 上的源代码:

public static Criterion eqOrIsNull(String propertyName, Object value) {
return value == null
? isNull( propertyName )
: eq( propertyName, value );
}

所以在我的例子中,eqOrIsNull 返回 eq("")。我应该使用 eqisNull 的析取,比如 Gregory answered .

最佳答案

Apply an "equal" constraint to the named property. If the value is null, instead apply "is null".

这意味着,只有当 NULL 作为值传递时,is null 才会被应用。如果您将任何其他字符串指定为值,则只会应用 equal

当您不确定在运行时作为参数传递给参数值的实际值时,这很有用。在这种情况下,以传统方式,您需要将not null 根据 not null 条件检查并写入条件,或者您需要按照 Gregory 的回答中提到的方式编写条件。

记住所有这些事实,您应该得到问题的答案。您只会获得那些包含空值的行,而不是具有 NULL 值的行,因为您已将空字符串指定为第二个参数。如果您将 NULL 指定为第二个参数,您将只获得那些具有 NULL 值的行。

如果这对您有帮助,请告诉我。

关于java - 如何使用 Hibernate eqOrIsNull(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com