La session de mon application contient un objet utilisateur qui possède un objet settings qui contient un attribut "effectiveOrganization". Les objets settings sont chargés avec impatience et comme la Session Hibernate est par requête, l'objet utilisateur de la session est détaché de la Session Hibernate.Grails: Vérifier si un objet détaché est dans un Set attaché
Je veux vérifier wheter la « effectiveOrganisation » est dans l'ensemble d'un objet attaché:
<g:if test="${session.user.settings.effectiveOrganisation in
documentInstance.downloadingOrganisations}">
Mais le résultat de ce test est toujours faux. Peut-être que c'est parce que l'organisation de la session et l'organisation du documentInstance ne sont pas des objets identiques. J'ai implémenté equals
et hashCode
dans la classe Organisation
mais cela n'a pas aidé.
J'ai essayé le test suivant dans un contrôleur:
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")
Le résultat surprenant est:
equals works
contains doesn't work
equals
et hashCode
se présente comme suit:
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;
}
Comment puis-je vérifier si un objet de la session est contenu dans l'ensemble d'un objet taché?
Merci pour l'explication. 'equals' et' hashCode' ont été générés par IntelliJ IDEA et je pense que le code devrait être correct. – deamon