Bonjour à vous,
Je suis relativement débutant sous Hibernate et je rencontre un petit problème.
Une rapide explication de mes objets (gestion de droits utilisateurs) :
- Un rôle (qui sera attribué à un utilisateur) est composé de capacités (une opération particulière sur une application).
- La composition a un point particulier, c'est à dire qu'une capacité est donnée à un rôle pour une application précise (classe d'association).
On a alors :
Dans mon cas, Role est une classe, Capacité aussi, et Application une énumération (j'en ai fait un type en hibernate)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Role ----------- Capacité | | Application
Voilà en simplifié le mapping hibernate que j'ai fait :
Ce qui me donne les tables :
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
26
27
28
29 <hibernate-mapping package="org.mydomain.db"> <!-- ContextApplication enum type definition --> <typedef name="ContextApplication" class="org.mydomain.utils.db.EnumUserType"> <param name="enumClassName">org.mydmomain.utils.system.ContextApplication</param> </typedef> <!-- Role class mapping --> <class lazy="false" name="org.mydomain.db.Role" table="ROLES"> <id name="id"> <generator class="native" /> </id> <property generated="never" lazy="false" name="name" not-null="true" unique="true" /> <set lazy="false" name="roleCapabilities" sort="unsorted" table="ROLE_CAPABILITIES"> <key column="ROLE_ID" /> <composite-element class="org.mydomain.db.RoleCapability"> <property name="application" not-null="true" type="ContextApplication" /> <many-to-one name="Capability" column="CAPABILITY_ID" not-null="true" /> </composite-element> </set> </class> <!-- Capability class mapping --> <class lazy="false" name="org.mydomain.db.Capability" table="CAPABILITIES"> <id name="id"> <generator class="native" /> </id> <property generated="never" lazy="false" name="name" not-null="true" unique="true" /> </class> </hibernate-mapping>
On peut voir que ma classe d'association est un "composite-element".
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 ROLES -------------- ID BIGINT(19) NOT NULL (PK) NAME VARCHAR(255) NOT NULL ROLE_CAPABILITIES -------------- ROLE_ID BIGINT(19) NOT NULL (PK) (FK) APPLICATION VARCHAR(255) CAPABILITY_ID BIGINT(19) NOT NULL (PK) (FK) CAPABILITIES -------------- ID BIGINT(19) NOT NULL (PK) NAME VARCHAR(255) NOT NULL
Cela marche très bien mais je souhaiterai rajouter une cascade à la suppression d'une capacité pour que cela supprime les "role_capabilities".
Pour cela, il me semble qu'il faudrait que je fasse une association "one-to-many" avec un attribut "cascade". Mais je ne sais pas sur quoi faire porter cette association (vu que je n'ai pas de "class" pour mes role_capabilities. Ca doit être simple comme chose pour ceux qui s'y connaissent plus quoi moi.
S'il y en a qui sauraient comme faire pour effectuer cette suppression automatique, je suis fortement intéressé.
Merci à tous !![]()
Partager