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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Role ----------- Capacité
          |
          |
     Application
Dans mon cas, Role est une classe, Capacité aussi, et Application une énumération (j'en ai fait un type en hibernate)

Voilà en simplifié le mapping hibernate que j'ai fait :
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>
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
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
On peut voir que ma classe d'association est un "composite-element".
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 !