Сеанс моего приложения содержит объекты пользователя, которые имеют объекты настроек, которые содержат атрибут «ffectiveOrganisation ».Объекты настроек загружаются с нетерпением, и, поскольку Hibernate-сессия выполняется по запросу, пользовательский объект в сеансе отсоединяется от Hibernate-Session.
Я хочу проверить, находится ли «ффективная организация »в наборе присоединенногообъект:
<g:if test="${session.user.settings.effectiveOrganisation in
documentInstance.downloadingOrganisations}">
Но результат этого теста всегда ложен.Возможно, это связано с тем, что организация в сеансе и организация documentInstance не являются идентичными объектами.Я реализовал equals
и hashCode
в классе Organisation
, но это не помогло.
Я попробовал следующий тест в контроллере:
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;
}
Как проверить, содержится ли объект из сеанса в наборе присоединенного объекта?