Salut Eric,
J'ai remonté comme toi la trace d'exécution et ai également bien
constaté qu'à la fois la molécule (et par conséquent
MoleculeProvenance) et l'utilisateur (et par conséquent
CampagneDroits pour cet exemple) étaient bien chargés dans la
même session. Je suis autant étonné que toi de voir qu'hibernate
charge alors distinctement deux objets différents pour les mêmes
campagnes. Il doit y avoir quelque chose qui nous échappe, il
faudrait regarder davantage ce qui se passe dans les logs
d'Hibernate.
J'ai trouvé une correction toutefois assez simple dans la
vérification des droits en utilisant un containsWithValue qui se
base sur idCampagne plutôt qu'un contains. Cela donne pour les
campagnesDroits (faire de même pour les campagnesCrees,
campagnesDroits et lotsDroits) :
// accessible si l'utilisateur a le droit
à la campagne
if
(CollectionTools.containsWithValue(utilisateur.getCampagnesDroits().keySet(),
"idCampagne",
BeanTools.AccessType.GETTER,
lot.getCampagne().getIdCampagne())) {
return true;
}
Il faudrait vérifier également plus haut que lot.getCreateur() est
bien chargé dans le même objet qu'utilisateur...
Si tu trouves pourquoi les objects ne sont pas chargés dans la
même instance, mieux vaut toutefois garder le code initial : il
sera plus performant.
Adrien
Le 29/04/2013 20:59, Eric Chatellier a écrit :