Persistance des collections
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 :
Code:
1 2
| tournoi.addToMatches(newMatch);
session.save(newMatch); |
sachant que le corps de "addToMatches" est :
Code:
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);
} |
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().
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 :
Code:
1 2 3
| for (Match match : matches ) {
session.update(match);
} |
ou bien faire un appel à update sur l'objet tournoi afin qu'il mette à jour le set par cascade :
Code:
1 2
| tournoi.setMatches(matches);
session.update(tournoi) |
sachant qu'hibernate cherchera à faire la mise à jour sur les autres associations de Tournoi (cascade=all) ?