Suppression et contrainte de clef étrangère
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:
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:
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:
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 ! :)