Bonjour,
Je dispose d'une classe Tournoi qui contient un ensemble de matches (Set<Match> matches).
Lorsque j'ajoute un match au tournoi, j'instancie un nouvel objet Match puis je l'ajoute au Set et enfin je le sauvegarde dans la base :
sachant que le corps de "addToMatches" est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tournoi.addToMatches(newMatch); session.save(newMatch);
Cependant, dans une autre classe, je fais appel à une requête qui ne récupère que des matches correspondant à certains critères puis j'apporte des modifications sur ces matches et je fais un update().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void addToMatches(Match match) { if (this.matches == null) this.matches = new java.util.HashSet<Match>(); this.matches.add(match); }
Ainsi, la collection "matches" associée au "tournoi" n'est plus synchronisée avec la base.
Faut-il faire constamment un "refresh" ?
Est-ce un problème que les instances java ne soient pas toujours synchronisées avec la base ?
Y a-t-il une stratégie particulière à adopter car je trouve qu'il est extrêmement difficile de maintenir les objets java synchronisés avec la base ?
J'ai par ailleurs une autre question concernant la performance. Supposons que je souhaite mettre à jour le Set de matches qui est associé au tournoi.
Vaut-il mieux parcourir les éléments un par un et faire un update sur chacun d'eux :
ou bien faire un appel à update sur l'objet tournoi afin qu'il mette à jour le set par cascade :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for (Match match : matches ) { session.update(match); }
sachant qu'hibernate cherchera à faire la mise à jour sur les autres associations de Tournoi (cascade=all) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 tournoi.setMatches(matches); session.update(tournoi)
Partager