Bonjour,
J'ai un cas qui doit être assez récurrent mais auquel je ne trouve pas de réponse :
J'ai un objet, disons "Garage", qui a une relation OneToMany avec des objets "Voiture"
Donc en clair :
Ma table "Voiture" à une clé étrangère vers ma table "Garage" (car "Garage" peut contenir une collection de "Voiture").
Et mon mapping est le suivant :
Classe "Garage"
Classe "Voiture"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 @Entity @Table(name = "garage") public class Garage implements java.io.Serializable { private int id; private List<Voiture> voituresList = new ArrayList<Voiture>(0); @OneToMany(fetch = FetchType.LAZY, mappedBy = "garage") public List<Voiture> getVoituresList() { return this.voituresList; } public void setVoituresList(List<Voiture> voituresList ) { this.voituresList = voituresList ; }
Fichier Voiture.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 @Entity @Table(name = "voiture") public class Voiture implements java.io.Serializable { private int id; private Garage garage; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "garage_id") public Garage getGarage() { return this.garage; } public void setGarage (Garage garage) { this.garage= garage; }
Fichier Garage.hbm.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <many-to-one class="fr.Garage" fetch="select" name="garage" cascade="all"> <column name="garage_id"> </column> </many-to-one>
Pour insérer mes objets, je fais quelque chose de la sorte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <bag name="voituresList" table="Voiture" inverse="true" cascade="delete-orphan" lazy="true" fetch="select"> <key> <column name="garage_id"> </column> </key> <one-to-many class="fr.Voiture" /> </bag>
Lors de l'insertion, mon Garage s'insère bien, ainsi que ma liste de voitures.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Garage garage = new Garage(); List<Voiture> voituresList; // Liste de Voiture, étant toutes reliées à Garage (voiture.setGarage(garage)) garage.setVoituresList(voituresList);
Ma question est donc :
Si j'avais 6 voitures en base reliées à mon Garage et que je décide d'en supprimer 1, comment faire pour que la suppression se fasse, mais lors d'un UPDATE de mon objet Garage ?
En gros : Je fais un update de mon objet Garage, je refait un garage.setVoituresList(voituresList) (car je suis obligé de repasser la liste complète des Voitures restantes, je ne peux pas changer ca dans ma modélisation). Je voudrais que la voiture "manquante" dans ma nouvelle liste soit supprimée.
Je ne sais pas si j'ai été clair ...
Merci de votre aide
Partager