我的应用程序的会话包含一个用户对象,其中包含一个设置对象,其中包含属性“effectiveOrganisation”。设置对象被急切加载,并且由于Hibernate Session是每个请求的,会话中的用户对象将从Hibernate Session中分离出来。Grails:检查分离的对象是否在附加组中
我要检查wheter的“effectiveOrganisation”是设置一个附加的对象:
<g:if test="${session.user.settings.effectiveOrganisation in
documentInstance.downloadingOrganisations}">
但这种测试的结果永远是假的。也许这是因为会话中的组织和documentInstance的组织不是完全相同的对象。我在Organisation
班实施了equals
和hashCode
,但没有帮助。
我想在一个控制器下面的测试:
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
equals
和hashCode
如下所示:
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;
}
我如何检查来自会话的对象包含在at的集合中tached对象?
感谢您的解释。 `equals`和`hashCode`由IntelliJ IDEA生成,我认为代码应该是正确的。 – deamon 2010-11-28 20:45:18