Bonjour à toutes et tous,
Je viens vers vous car j'ai un problème
lors de la suppression d'un objet qui se trouve dans deux collections.
Je ne suis pas certain d'avoir bien représenter les relations sur le schéma.
J'ai un Dossier d'origine (celui se trouvant au dessus du schéma).
Ce dossier contient une liste d'Action.
Une action contient un set de Lien. Et un lien contient un Dossier(Résultat).
Lorsque j'essaye de supprimer le Dossier(Résultat) j'ai l'exception suivante :
Code:
org.hibernate.exception.ConstraintViolationException: could not delete collection rows: [Action.liensBis#23]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.collection.AbstractCollectionPersister.deleteRows(AbstractCollectionPersister.java:1292)
at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:54)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
....
Caused by: java.sql.SQLException: Cannot insert a null into column (liens.action_id)
...
L'erreur se produit donc lorsque j'essaye de supprimer un dossier résultat.
Le problème semble venir de la
suppression du lien entre l'action et le dossier résultat et à première vue je dirais qu'il y a un
problème avec un cascade??? mais là je calle un peu.
Une piste à creuser?
Voici le mapping correspondant :
Au niveau du mapping de Dossier
Code:
<list name="actions" table="action" lazy="true" cascade="all-delete-orphan">
<key column="dossier_id" not-null="true"/>
<index column="liste_idx"/>
<one-to-many class="Action"/>
</list>
<set name="liens" table="liens" lazy="true" cascade="delete">
<key column="dossier_id" not-null="true" />
<one-to-many class="Lien"/>
</set>
Au niveau du mapping de Action
Code:
<set name="liensBis" table="liens" lazy="true" cascade="save-update">
<key column="action_id"/>
<one-to-many class="Liens"/>
</set>
Au niveau de Lien
Code:
<many-to-one name="actionParente" class="Action" column="action_id" cascade="none" not-null="true"/>
<many-to-one name="dossierLie" class="Dossier" column="dossier_id" cascade="none" insert="false" update="false" not-null="true"/>
Merci d'avance pour votre aide.