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}"); } }
Merci d'avance pour votre aide.
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") } }
Partager