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
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
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>
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
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>
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"
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 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 ^^"
Partager