Bonjour à tous,

Je dispose de ces 4 tables :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
		-------------		----------------	    -------------------		   ----------------------------
		| Seances   |		|SeancesGroupes|            |RessourcesGroupes|		   |RessourcesGroupesEtudiants|
		|---------- |		|--------------|	    |-----------------|		   ----------------------------
		|*codeSeance|<--------->|*codeSeance   |	|-->|  *codeGroupe    |<-----|     |   *code		      |
		|dateSeance |		|*codeRessource|<-------|   |    nom	      |	     |---> |	codeGroupe            |
		-------------		----------------	    -------------------		   |    codeEtudiant	      |
												   ----------------------------
et de leur 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
<hibernate-mapping package="beans" default-cascade="none" default-access="property" default-lazy="true" auto-import="true">
    <class name="Seances" table="seances" lazy="true" catalog="base1">
        <id name="codeSeance" type="Integer">
            <column name="codeSeance" />
            <generator class="native" />
        </id>     
        <set name="seanceGroupe" inverse="true" lazy="true" table="seances_groupes" fetch="select">
            <key>
                <column name="codeSeance" not-null="true" />
            </key>
            <one-to-many class="SeancesGroupes" />
        </set>
        <property name="dateSeance" type="date">
            <column name="dateSeance" length="10" not-null="true" />
        </property>
    </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
<hibernate-mapping package="beans" default-cascade="none" default-access="property" default-lazy="true" auto-import="true">
    <class name="SeancesGroupes" table="seances_groupes" lazy="true" catalog="base1">
        <composite-id name="id" class="SeancesGroupesId">
            <key-property name="codeSeance" type="Integer">
                <column name="codeSeance" />
            </key-property>
            <key-property name="codeRessource" type="Integer">
                <column name="codeRessource" />
            </key-property>
        </composite-id>
        <many-to-one name="ressourceGroupe" class="RessourcesGroupes" update="false" insert="false" fetch="select">
            <column name="codeRessource" not-null="true" />
        </many-to-one>
    </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
<hibernate-mapping package="beans" default-cascade="none" default-access="property" default-lazy="true" auto-import="true">
    <class name="RessourcesGroupes" table="ressources_groupes" lazy="true" catalog="base1">
        <id name="codeGroupe" type="Integer">
            <column name="codeGroupe" />
            <generator class="native" />
        </id>
		 <set name="ressourceGroupeEtudiant" inverse="true" lazy="true" table="ressources_groupes_etudiants" fetch="select">
            <key>
                <column name="codeGroupe" not-null="true" />
            </key>
            <one-to-many class="RessourcesGroupesEtudiants" />
        </set>
        <property name="nom" type="string">
            <column name="nom" not-null="true" />
        </property>
    </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="beans" default-cascade="none" default-access="property" default-lazy="true" auto-import="true">
    <class name="RessourcesGroupesEtudiants" table="ressources_groupes_etudiants" lazy="true" catalog="base1">
        <id name="code" type="long">
            <column name="code" />
            <generator class="native" />
        </id>
        <property name="codeGroupe" type="long">
            <column name="codeGroupe" not-null="true" />
        </property> 
        <property name="codeEtudiant" type="long">
            <column name="codeEtudiant" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

Plusieurs groupes (d'étudiants) peuvent assister à la même séance.
Un groupe contient plusieurs étudiants.

Afin de tester le bon fonctionnement du mapping j'ai commencé par demander une séance en utilisant
son "codeSeance". Il me ramène donc bien la seance, tous les groupes qui lui sont affiliés et tous les
étudiants de ces groupes.
Cependant mon but est de ramener toutes les seances d'un étudiant par son "codeEtudiant" et une "dateSeance"
comprise entre dateDeb et dateFin. J'ai donc écris mes critères de recherche :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
DetachedCriteria critere=DetachedCriteria.forClass(Seances.class); 
DetachedCriteria critereSeanceGrp = critere.createCriteria("seanceGroupe");
DetachedCriteria critereRessGrp = critereSeanceGrp.createCriteria("ressourceGroupe");
DetachedCriteria critereRessGrpEtu = critereRessGrp.createCriteria("ressourceGroupeEtudiant");
critereRessGrpEtu.add(Expression.eq("codeEtudiant", codeEtudiant));
critere.add(Expression.between("dateSeance", dateDeb, dateFin));
return getHibernateTemplate().findByCriteria(critere);
Cette fois ci il me ramène bien les séances entre dateDeb et dateFin pour l'étudiant voulu mais !
Le souci, on y arrive, est que par la même occasion il ramène également tous les étudiants appartenant
au même groupe que l'étudiant recherché. Ce qui évidement rend la rêquete bien trop longue.
Comment faire pour affiner ma recherche et me débarrasser de tous les autres étudiants?
Les lazy sont pourtant tous à "true", j'ai essayé de faire des jointures type "setFetchMode" dans les critères
mais sans succès.

Merci d'avance