Bonjour à tous,
Voilà j'ai un problème de compression avec Hibernate version 3, Je vais essayer d'expliquer mon soucis.
J' ai une classe Team qui possède une collection de players définit comme suit:
1 2 3 4 5 6 7 8 9 10 11 12
|
public class Team implements Serializable{
......
private Set players = new HashSet();
.......
public Set getPlayers() {
return players;
}
public void setPlayers(Set players) {
this.players = players;
} |
Puis dans le fichier de mapping je définit la relation de la collection players qui contiendra des éléments de la classe Player
fichier Team.hbm.xml:
1 2 3 4 5 6 7
|
<set name="players"
cascade="save-update"
inverse="true">
<key column="TEAM_ID" />
<one-to-many class="com.eyrolles.sportTracker.model.Player" />
</set> |
la propriété 'inverse' est activé, si j'ai bien compris, cela veux dire que c'est la Classe player qui sera responsable de la relation?
Dans une classe de test:
1) je récupère un Team
Team theTeam = (Team) session.get(Team.class, new Long(1));
2) je récupère la liste des players associé a mon Team, je sais qu'il y en a que un....
1 2 3 4 5 6 7 8 9 10 11 12
| Set<Player> players = theTeam.getPlayers();
for(Player theplayer: players){
//Changer le nom du player
System.out.println("Nom du joueur: " + theplayer.getName());
theplayer.setName("Snyper");
//players.clear();
players.add(theplayer);
}
theTeam.setPlayers(players);
session.flush(); |
Au moment du flush vu que Player est responsable de maintenir la relation, le nom du player est actualisé en base.
Si maintenant je décide de mettre la propriété a false
1 2 3 4 5 6 7
|
<set name="players"
cascade="save-update"
inverse="false">
<key column="TEAM_ID" />
<one-to-many class="com.eyrolles.sportTracker.model.Player" />
</set> |
Le nom ne devrais pas être actualisé, mais on base je peux vérifier que oui.
Si vous pourriez m'expliquer pourquoi cette propriété ne change rien, je vous remercie d'avance.
Cordialement.
Partager