Hibernate: supprimer plusieurs-à-plusieurs association
J'ai deux tables avec la plusieurs-à-plusieurs association.
— DB fragment:
charges
Id
Nom
sessions
Id
Date
sessionsloads
Idchargement
SessionId
— Hibernate mapping fragments:
/* loads.hbm.xml */
<set name="sessions" table="sessionsloads" inverse="true">
<key column="LoadId" />
<many-to-many column="SessionId" class="Session" />
</set>
…
/* sessions.hbm.xml */
<set name="loads" table="sessionsloads">
<key column="SessionId" />
<many-to-many column="LoadId" class="Load" />
</set>
Pour supprimer une entrée de la table d'association sessionsloads, j'exécute ce code:
Session session = sessionDao.getObject(sessionId);
Load load = loadDao.getObject(loadId);
load.getSessions().remove(session);
loadDao.saveObject(load);
Mais, après le lancement, ce code ne rien changer.
Quel est le bon chemin pour supprimer une association?
OriginalL'auteur 0x2D9A3 | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre à jour les deux côtés de la liaison entre
Load
etSession
:En fait, de nombreux développeurs défensives, les méthodes pour gérer bi-directionnelle des associations. Par exemple sur
Load
, vous pouvez ajouter des méthodes suivantes:delete
requête pour le journal.Il doit y avoir un autre problème quelque part, parce que cela fonctionne bien. Je vais essayer de reproduire plus tard avec votre mapping, mais je sais que c'est de travailler.
Comme vous l'avez mentionné,
cascade
ne fonctionne pas dans ce cas, non? Aussi, les gens disent qu'il peut travailler avec lesession.flush()
. Mais que puis-je faire si j'utilisegetHibenateTemplate
?Vous avez raison, le problème était dans un autre endroit — de ma faute avec le
compareTo()
fonction. Merci!!!!Si vous omettez le
inverse="true"
, alors vous n'aurez pas un bi-directionnelle de l'association mais 2 uni-directionnelle des associations (ce qui est très différent). Et dans ce cas, oui, je crois que vous auriez à enregistrer lesession
entité trop.OriginalL'auteur Pascal Thivent
Ressemble vous suffit de tourner sur la persistance Transitive (par exemple, cascade=all-delete-orphan "plein" transitive.)--
Modifier
Merci pour le upvote, althugh Pascal était précis dans cette cascade n'est pas suffisant pour résoudre le problème d'origine, mais que les deux côtés de la relation n'est pas géré. Apprends-moi à répondre à la hâte 🙂
--
Aussi, une Entité du nom de Session cassé mon cerveau 🙁
Session
. Convenu que c'est totalement inadaptés nom. Mais ne peut pas le changer à l'heure actuelle.OriginalL'auteur Affe