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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tournoi.addToMatches(newMatch);
session.save(newMatch);
sachant que le corps de "addToMatches" est :
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);
	}
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
tournoi.setMatches(matches);
session.update(tournoi)
sachant qu'hibernate cherchera à faire la mise à jour sur les autres associations de Tournoi (cascade=all) ?