Bonjour,
Je suis nouveau dans l'utilisation d'hibernate. Je viens de réaliser une application qui fonctionne, seulement j'ai dû à plusieurs reprise contourner des problèmes sans vraiment comprendre pourquoi ça ne fonctionnait pas.
Je pense que c'est un problème de mapping puisque j'ai également des problèmes pour les jointures.
J'ai trois tables : Profil(id, intitulé), Autorisation(id_profil, id_fonction, perm_read, perm_update), Fonctionnalité(id, intitulé)
Autorisation est donc une association possédant des attributs de type booléen.
Le fait que l'association ait des attributs m'a poussé à utiliser le mapping suivant :
Le "composite-element" dans Profil me permet de gérer parfaitement le fait que l'association ai des attributs etc. Je n'ai pas utilisé ce tag dans Fonction car je n'en ai pas l'utilité et donc ne pense pas que ce soit nécessaire.
Code xml : 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
30
31
32
33
34
35
36
37
38
39
40
41 <class name="habilitation.Profil" table="profils"> <id name="id" column="id_profil"> <generator class="native" /> </id> <property name="intitule" column="intitule_profil" /> <set name="autorisations" table="autorisation" lazy="true"> <key column="id_profil" /> <composite-element class="habilitation.Autorisation"> <property name="read" column="perm_read" /> <property name="create" column="perm_create" /> <property name="delete" column="perm_delete" /> <property name="update" column="perm_update" /> <many-to-one name="fonction" column="id_fonction" class="habilitation.Fonction" /> </composite-element> </set> </class> <class name="habilitation.Autorisation" table="autorisation"> <composite-id> <key-many-to-one name="profil" class="habilitation.Profil" column="id_profil" lazy="false" /> <key-many-to-one name="fonction" class="habilitation.Fonction" column="id_fonction" lazy="false" /> </composite-id> <property name="read" column="perm_read" /> <property name="create" column="perm_create" /> <property name="delete" column="perm_delete" /> <property name="update" column="perm_update" /> </class> <class name="habilitation.Fonction" table="fonction"> <id name="id" column="id_fonction"> <generator class="increment" /> </id> <property name="intitule" column="intitule_fonction" /> <set name="autorisations" table="autorisation" lazy="false"> <key column="id_fonction" /> <one-to-many class="habilitation.Autorisation" /> </set> </class>
Voici donc mes trois classes :
Code java : 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 public class Profil { private int id; private String infos_habilitation; private Set autorisations; ... } public class Autorisation implements Serializable { private Fonction fonction; private Profil profil; private boolean create; private boolean read; private boolean update; private boolean delete; ... } public class Fonction { private int id; private String intitule; private Set autorisations; ... }
Ce que je ne comprends pas, c'est pourquoi le code suivant ne fonctionne pas :
Ce code ne me donne aucun message d'erreur mais n'enlève pas non plus l'autorisation de ce profil.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 monProfil.getAutorisations().remove(monAutorisation) session.save(monProfil)
J'ai contourné le problème en passant par un
Mais j'aimerais comprendre pourquoi la première ne fonctionne pas.
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 session.delete(autorisation); session.flush();
Bien qu'aillant lu des tutoriels par dizaines ces deux dernières semaines ce genre de phénomène est encore pour moi assez flou.
Merci pour vos lenternes.
N'hésitez pas à me demander toute autre information utile.
Partager