-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Problème suppression d'un objet contenu dans 2 collections
PostPosted: Fri May 23, 2008 5:42 am 
Newbie

Joined: Fri May 23, 2008 4:07 am
Posts: 2
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.

Image

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.


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 27, 2008 12:00 pm 
Beginner
Beginner

Joined: Thu Nov 15, 2007 11:27 am
Posts: 34
Je pense que ton probleme viens de la liste des action dans le dossier. Cette liste tu l'a deja a priori dispo a travers de la liste des liens.

Quand tu effaces ton dossier, il va cascader sur action qui cascade (sans doute en update) sur lien qui tente de mettre action id a null.

Je te conseille de ne pas cascader la relation dossier - action, ou plus simplement de ne pas mettre le liste d'action dans dossier, mais de la récupéré par la liste de lien.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Jun 04, 2008 7:58 am 
Newbie

Joined: Fri May 23, 2008 4:07 am
Posts: 2
Merci pour ta réponse.

Je dois garder un historique de l'ensemble des actions effectuées sur un dossier. Les actions possibles ne permettant pas toutes de lier des dossiers entre eux, j'ai donc impérativement besoin de garder la liste d'actions au niveau du dossier. :-/

(la possibilité de lier deux dossiers est propre à un type d'action bien particulier).


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.