IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

[Hibernate] Suppression en cascade


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut [Hibernate] Suppression en cascade
    Bonjour à tous

    Pour commencer j'espère avoir posté dans la bonne section, vu que c'est plutôt un problème hibernate que spring, mais je n'ai pas vu de forum dédié à hibernate donc j'ai pensé qu'ici était le mieux, je m'en excuse si ce n'est pas le cas ^^"

    Voici mon problème :

    J'ai deux tables :

    Une table OBJ_PROFILE avec comme champs pro_id (PK), pro_name.
    Une table REL_USER_RIGHTS avec comme champs acc_id (PK1), pro_id (PK2), usa_acces, usa_visibility.

    acc_id et pro_id forment donc la clef primaire composée de ma table REL_USER_RIGHT. REL_USER_RIGHTS.pro_id est la FK de OBJ_PROFILE et acc_id est la FK d'une autre table de référence mais celle là n'est pas importante.

    Bon pour que ça soit un peu plus parlant, la première est une table contenant des profils, la deuxième contient les droits liés à ces profils. Et chaque droit est identifié par l'association droit-profil.

    Ce que je souhaite faire c'est que lorsque je delete un profil, tous les droits associés présent dans REL_USER_RIGHTS soient supprimés aussi.

    Voici mes deux mapping hibernate :

    ObjProfile.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
    18
    19
    20
    21
    22
    23
    24
    25
    <hibernate-mapping default-cascade="all">
        <class name="com.gazdefrance.cpg3.model.ObjProfile" table="OBJ_PROFILE">
            <id name="proId" type="java.lang.Long">
                <column name="PRO_ID" precision="22" scale="0" />
                <generator class="sequence">
                	<param name="sequence">SEQ_OBJ_PROFILE</param>
                </generator>
            </id>
            <property name="proName" type="string">
                <column name="PRO_NAME" length="50" not-null="true" />
            </property>
            <set name="objUsers" inverse="true">
                <key>
                    <column name="PRO_ID" precision="22" scale="0" not-null="true" />
                </key>
                <one-to-many class="com.gazdefrance.cpg3.model.ObjUser" />
            </set>
            <set name="relUserRightses" inverse="true">
                <key on-delete="cascade">
                    <column name="PRO_ID" precision="22" scale="0" not-null="true"/>
                </key>
                <one-to-many class="com.gazdefrance.cpg3.model.RelUserRights" />
            </set>
        </class>
    </hibernate-mapping>
    RelUserRights.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
    18
    19
    20
    21
    22
    23
     
    <hibernate-mapping>
        <class name="com.gazdefrance.cpg3.model.RelUserRights" table="REL_USER_RIGHTS">
            <composite-id name="id" class="com.gazdefrance.cpg3.model.RelUserRightsId">
                <key-many-to-one
            	name="acc"
    	        class="com.gazdefrance.cpg3.model.ObjRight">
    	        	<column name="ACC_ID" />
    	    	</key-many-to-one>
    	    	<key-many-to-one
            	name="pro"
    	        class="com.gazdefrance.cpg3.model.ObjProfile">
    	        	<column name="PRO_ID" />
    	    	</key-many-to-one>
            </composite-id>
            <property name="usaVisibility" type="char">
                <column name="USA_VISIBILITY" length="1" not-null="true" />
            </property>
            <property name="usaAcces" type="char">
                <column name="USA_ACCES" length="1" not-null="true" />
            </property>
        </class>
    </hibernate-mapping>
    Et puis la méthode qui supprime l'objet profil mais bon ça ya pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public void deleteProfile(ObjProfile pProfile) {
     
            Session session = null;
     
            session = getSessionFactory().getCurrentSession();
            session.delete(pProfile);
     
        }
    Donc en rajoutant le default-cascade="all" et on-delete="cascade" dans le mapping ObjProfil je pensais que ça passerait et en fait non lorsque j'execute ma fonction je tombe toujours sur l'erreur oracle de violation d'intégrité "NOM_CONTRAINTE blabla violated child record found"

    Donc j'avoue ne pas savoir comment faire, car les aides que j'ai trouvées sur le net ne sont pas dans le cas comme ici ou ma la FK de ma table forme une clef composée primaire. Et donc dans le mapping hibernate de RelUserRights ce n'est pas les mêmes balises :/

    Je vous remercie d'avance et j'espère qu'une âme charitable saura me donner la solution ou du moins m'aiguiller ^^"

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Par défaut
    Bon bah j'ai finalement réussi à résoudre mon problème, il suffisait de rajouter l'attribut cascade="delete" dans la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <set name="relUserRightses" inverse="true">

Discussions similaires

  1. Suppression en cascade avec Hibernate
    Par Kamasa dans le forum Hibernate
    Réponses: 2
    Dernier message: 24/02/2010, 09h51
  2. Réponses: 4
    Dernier message: 18/06/2007, 08h30
  3. Requetes de suppression en cascade
    Par log2n dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 20/05/2005, 10h07
  4. Suppression en cascade
    Par log2n dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2005, 20h33
  5. [debutant]suppression en cascade
    Par christophebmx dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 03/05/2005, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo