[Hibernate] many-to-many et transaction
Bonjour à tous !
Avant de venir poster ici, j'ai bien regardé tous les sujets "many-to-many" pour Hibernate mais je ne trouve ni la solution ni une personne ayant les mêmes problèmes que moi.
J'explique un peu le contexte. J'ai deux tables PROCEDURE et OBJET avec une relation ** bi-directionnelle entre les deux.
j'ai donc fait un mapping de ces deux classes avec un many-to-many
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <class name="bo.patrimoine.Objet" table="OBJET">
<id name="idObjet" type="int">
<column name="IDOBJET"/>
<generator class="increment" />
</id>
<set name="procedures" table="RELATION_OBJET_PROCEDURE" cascade="all">
<key column="IDOBJET"/>
<many-to-many column="IDPROCEDURE" class="bo.patrimoine.Procedure"/>
</set>
</class>
<class name="bo.patrimoine.Procedure" table="PROCEDURE">
<id name="idProcedure" type="int">
<column name="IDPROCEDURE"/>
<generator class="increment" />
</id>
<set name="objets" table="RELATION_OBJET_PROCEDURE" cascade="all">
<key column="IDPROCEDURE"/>
<many-to-many column="IDOBJET" class="bo.patrimoine.Objet"/>
</set>
</class> |
Mon soucis est que je ne peux pas créer de nouveaux liens entre ces deux tables, lorsque j'ajoute un OBJET à un PROCEDURE et que je sauvegarde (+ commit) la collection se vide et je n'ai aucun nouvel enregistrement en BDD.
Plus fort, lorsque j'ai déjà un lien entre un OBJET et une PROCEDURE, que je charge cette PROCEDURE et que je fais un update (sans rien touché d'autre), la collection se vide aussi et supprime mon lien en BDD !
Voici mon code :
Code:
1 2 3 4 5 6 7
| HibernateUtil.currentSession();
Transaction tx = HibernateUtil.currentSession().beginTransaction();
Procedure procedure = (Procedure)HibernateUtil.currentSession().createQuery("from Procedure where idProcedure=1").uniqueResult();
System.out.println(procedure.getObjets().size());
HibernateUtil.currentSession().saveOrUpdate(procedure);
tx.commit();
System.out.println(procedure.getObjets().size()); |
J'ai bien essayé de retirer le cascade="all" d'un ou des 2 mapping mais rien n'y fait.
Je butte dessus depuis ce matin et j'ai la tête qui va exploser bientôt.
Merci d'avance pour vos conseils.
A+