Bonjour,
Je profite de mon RTT pour poser sereinement un problème sur lequel je butte.
Je coince pour ma requête HQL.
L'extrait de l'UML de mes POJO est le suivant:
http://www.developpez.net/forums/att...1&d=1363675818
La BDD a pour modèle suivant (pour ce qui est intéressant):
http://www.developpez.net/forums/att...0&d=1363675842
Mon objectif est de récupérer les objets Modele, Version, Markup et Article.
Pour un couple article/version, le markup peut être null. Je veux que dans le tableux récupéré, je puisse avoir un objet java null.
Si je me place en SQL (ma base de donnée est MySQL), la requête pertinente est:
La requête SQL donne la bonne réponse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select m.nom, v.nom, markup.taux_markup, article.nom from modele m left join version v on v.fk_modele=m.id left join article_modele am on am.fk_modele=m.id inner join article a on a.id=am.fk_article left join markup mu on mu.fk_article=a.id and mu.fk_version=v.id
Le problème est de traduire en HQL.
Le début serait du style:
Le problème est que la jointure ne se fait que d'un côté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 select m,v,mu,a from Modele m left join m.versions as v left join m.articlesModele as am inner join am.article as a left join v.markups as mu
Avec cette requête, on ne récupère rien quand le markup est null.
On peut corriger la dernière ligne par:
On a un résultat (qui vaut ce qu'il vaut), mais au moins, les markup null s'affichent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 left join v.markup as mu with mu.article.id=10
Par contre, si je corrige par:
Je lève une exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2left join v.markups as mu with mu.article.id=a.id
La solution actuelle est de rechercher les couple (Version/Article) puir ensuite les Markup liés, mais franchement, c'est crade.
Je préfèrerait une solution dans l'esprit du SQL.
Partager