Bonjour,
J'ai ces 3 tables là :
FONCTION
id_fonction integer not null,
lib varchar,
primary key id_fonction;
ROLE
id_role integer not null,
lib varchar,
primary key id_role;
FONCTION_ROLE
id_fonction_role integer not null,
id_fonction integer not null,
id_role integer not null,
primary key (id_fonction_role);
Je les ai mappé en Hibernate 3.2 ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <hibernate-mapping package="org.myorg.vo" default-lazy="false"> <class name="FonctionVO" table="FONCTION" dynamic-update="true" lazy="false"> <id name="id" column="FONCTION_ID"> <generator class="increment" /> </id> <property name="lib" column="FONCTION_LIB" /> <set name="roles" table="FONCTION_ROLE" inverse="true" lazy="false" > <key column="FONCTION_ID" update="true"/> <many-to-many column="ROLE_ID" class="RoleVO" /> </set> </class> </hibernate-mapping>Mes classes Java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <hibernate-mapping package="org.myorg.vo" default-lazy="false"> <class name="RoleVO" table="ROLE" dynamic-update="true" lazy="false"> <id name="id" column="ROLE_ID"> <generator class="increment" /> </id> <property name="lib" column="ROLE_LIB" /> <set name="fonctions" table="FONCTION_ROLE" inverse="true" lazy="false"> <key column="ROLE_ID" update="true"/> <many-to-many column="FONCTION_ID" class="FonctionVO"/> </set> </class> </hibernate-mapping>
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 public class FonctionVO { private long id; private String lib; private Set<RoleVO> roles = new HashSet<RoleVO>(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLib() { return lib; } public void setLib(String lib) { this.lib = lib; } public Set<RoleVO> getRoles() { return roles; } public void setRoles(Set<RoleVO> roles) { this.roles = roles; } public void addRole(RoleVO role) { role.getFonctions().add(this); this.getRoles().add(role); } }Déjà, est ce que cela vous parait optimisé ? Je veux pouvoir lister les roles d'une fonction, et les fonctions ayant tel ou tel role. Et je veux pouvoir ajouter des roles à une fonction.
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 public class RoleVO { private long id; private String lib; private Set<FonctionVO> fonctions = new HashSet<FonctionVO>(); public long getId() { return id; } public void setId(long id) { this.id = id; } public String getLib() { return lib; } public void setLib(String lib) { this.lib = lib; } public Set<FonctionVO> getFonctions() { return fonctions; } public void setFonctions(Set<FonctionVO> fonctions) { this.fonctions = fonctions; } }
Pour ajouter des role sà une fonction, je fais ceci :
Sauf que Hibernate ne me sauvegarde que la fonction, il ne m'insère pas les role_id ajoutés dans la table FONCTION_ROLE.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 FonctionVO fctOld = fonctionService.getById(idFonction); if(rolesSelected != null) { for (Iterator iter = rolesSelected.iterator(); iter.hasNext();) { String checkboxId = (String) iter.next(); RoleVO roleTmp = roleService.getById(new Long(checkboxId)); fctOld.addRole(roleTmp); } } fonctionService.update(fctOld);
Pourquoi donc ?
Merci pour vos lumières.
Partager