Bonjour,

Dans le cadre d'un de mes projets, j'utilise hibernate version 3.2.
L'application affiche les informations d'une base de données sous forme de tableau.

J'ai 4 tables. Une table Membres reliée à une table Sociétés. Un membre n'a qu'une seule société et une société à plusieurs membres.
Il y a aussi une table Groupes. Un membre pouvant appartenir à plusieurs groupes et un groupe pouvant contenir plusieurs membres, un table de liaison a été créée entre Membres et Groupes : Groupes_Membres.

En raison du grand nombre de membres, pour améliorer la vitesse d'affichage, du lazy loading a été mis en place entre les membres et leur société.

Seulement maintenant, le problème se situe au niveau de l'affichage des groupes. Il faut dans cet affichage afficher les membres et leurs sociétés.
Ce chargement là prend beaucoup trop de temps. Mes tests montrent que ce la ne provient pas de la liaison entre Groupe et Membres (pourtant en lazy load) mais bien lors de la récupération des sociétés.

J'ai effectué plusieurs recherches et lu les docs hibernate sur le lazy loading mais je ne vois pas vraiment ce que je peux faire pour améliorer les performances. Sur internet on parle de plusieurs techniques avec le fecthing mode par exemple, mais j'ai du mal à comprendre de quoi il en retourne exactement.

Pouvez-vous m'aider ?

Merci.

Mes xml de mappings :

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
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.home.datamodel">
	<class name="Membre" table="membres" lazy="true">
		<id name="membre_id" type="integer" column="membre_id">
			<generator class="increment" />
		</id>
 
		<many-to-one name="societes" column="societe_id" class="Societe" />
 
		<set name="groupes" table="groupe_membre" lazy="true">			
			<key column="membre_id" />
			<many-to-many class="Groupe" column="groupe_id" />
		</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
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.home.datamodel">
 
	<class name="Societe" table="societes" lazy="true">
		<id name="societe_id" type="integer" column="societe_id">
			<generator class="increment" />
		</id>
 
		<set name="membres" lazy="true">
			<key column="societe_id" />
			<one-to-many class="Membre" />
		</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
 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.home.datamodel">
 
	<class name="Groupe" table="groupes" lazy="true">
		<id name="groupe_id" type="integer" column="groupe_id">
			<generator class="increment" />
		</id>
 
		<set name="membres" table="groupe_membre" lazy="true">			
			<key column="groupe_id" />
			<many-to-many class="Membre" column="membre_id" />
		</set>
 
	</class>
</hibernate-mapping>