gpt4 book ai didi

java - Grails:检查分离的对象是否在附加的集合中

转载 作者:行者123 更新时间:2023-11-30 05:08:25 25 4
gpt4 key购买 nike

我的应用程序的 session 包含一个用户对象,该对象具有一个设置对象,其中包含属性“effectiveOrganization”。设置对象会立即加载,并且由于 Hibernate Session 是针对每个请求的,因此 session 中的用户对象与 Hibernate Session 分离。

我想检查“有效组织”是否在附加对象的集合中:

<g:if test="${session.user.settings.effectiveOrganisation in
documentInstance.downloadingOrganisations}">

但是这个测试的结果总是错误的。也许这是因为 session 中的组织和 documentInstance 的组织不是相同的对象。我在 Organization 类中实现了 equalshashCode,但没有帮助。

我在 Controller 中尝试了以下测试:

    def org = session.user.settings.effectiveOrganisation
doc.downloadingOrganisations.each{
if(it.equals(org))
println("equals works")
}
if(! doc.downloadingOrganisations.contains(org))
println("contains doesn't work")

令人惊讶的结果是:

equals works
contains doesn't work

equalshashCode 如下所示:

boolean equals(o) {
if (this.is(o)) return true;
if (getClass() != o.class) return false;
Organisation that = (Organisation) o;
if (name != that.name) return false;
if (selfInspecting != that.selfInspecting) return false;
return true;
}

int hashCode() {
int result;
result = (name != null ? name.hashCode() : 0);
result = 31 * result + (selfInspecting != null ? selfInspecting.hashCode() : 0);
return result;
}

如何检查 session 中的对象是否包含在附加对象集中?

最佳答案

看来您的哈希码计算可能是问题所在。哈希码的计算通常比等于要便宜得多,因此首先进行比较。如果发生冲突并且两个不同的对象生成相同的哈希码,则检查 equals()。但是,如果两个对象具有不同的哈希码,则根据哈希码/等于约定,它们被假定为不同的对象。

集合中的实例是代理 - 这会影响哈希码计算吗?

关于java - Grails:检查分离的对象是否在附加的集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296683/

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