Bonjour à tous,

J'ai une relation manyToMany, décomposée en 2 relations oneToMany et inversement pour ajouter à la classe intermédiaire un champ supplémentaire. Lorsque je récupère ma classe Profil, liée à Compétence (classe intermédiaire), possédant elle même plusieurs relations avec Specialité, j'ai bizarrement le retour d'une liste de compétences avec une unique spécialité.
Ce problème ne semble survenir qu'après une CriteriaQuery qui effectue une recherche sur les profils possédant une spécialité recherchée.

Voici une partie du code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
class Profil {
 
     String firstName;
     String lastName;
     Date naissance;
     String telephone;
     String email;
//...
   static hasMany = [competences:Competence];
    Set competences
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
class Specialite {
 
    String libelle;
 
    static hasMany = [competences:Competence];
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
class Competence {
 
    Integer noteMaitrise;
    Profil profils
    Specialite specialites
 
    static belongsTo = [specialites:Specialite, profils:Profil];
    //Set specialites
 
     String toString(){
        return("${specialites.libelle}");
    }
}

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
def searchOnProfil = {
        def c = Profil.createCriteria()
        def results = []
        if(params.keywordOnCompetences != null){
            results = c.list{
                competences{
                    specialites{
                        ilike("libelle", "%"+ params.keywordOnCompetences +"%")
                    }
                }
            }
            println "END RESEARCH"
        }
 
        if(results.size() != 0){
            //debug
            println("nombre de résultats : " + results.size())
            def fullResults = []
            results.each{
                println it.class
                //fullResults.add(Profil.get(it.id))
            }
            flash.message = "Résultats retournés : "+results.size()
            chain(controller:"recherche", action:"list", model:["resultsList":results])
        }else{
            flash.message = "Aucun profil correspondant"
            chain(controller:"profil", action:"list")
        }
    }
Merci d'avance pour votre aide.