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>
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>
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
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);
	}
 
}
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;
	}
}
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.

Pour ajouter des role sà une fonction, je fais ceci :
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);
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.

Pourquoi donc ?

Merci pour vos lumières.