Le Mon, 09 Aug 2010 14:16:47 +0200, Jean Couteau <couteau@codelutin.com> a écrit :
Well done Flo, t'as tout capté direct. En fait, je connais pas du tout les join du coup j'utilises pas et je contournes. Ma requête passait bien en SQL, mais du coup en l'adaptant en HQL c'était plus bon, la tienne si (enfin presque ;) ). Pour info en TopiaQuery ça donne (adapté) :
TopiaQuery query = episodeDAO.createQuery("E"); query.setSelect("S."+Show.TITLE, "S."+Show.OVER, "S."+Show.RUNTIME, "COUNT(*)", "S."+Show.RUNTIME+"*COUNT(*)"); query.addLeftJoin("E.season", "SE", false); query.addLeftJoin("SE.show", "S", false); query.addEquals("E."+Episode.VIEWED, true); query.addGroup("S."+Show.TITLE, "S."+Show.OVER, "S."+Show.RUNTIME); query.addOrder("S."+Show.TITLE);
Va falloir que je me penches un peu plus sur les join moi même si comme ça j'ai vu un peu comment m'en servir.
Dans ton cas tu peux même t'en passer, enfin si tu as bien une seule saison pour un épisode et un seul show pour une saison : String episodeAlias = "E"; // La méthode getProperty te fait simplement une concatenation des // parametres en les séparant par un '.' c'est comme si j'avais mis // "E.season" String seasonProperty = TopiaQuery.getProperty(episodeAlias, Episode.SEASON); String showProperty = TopiaQuery.getProperty(seasonProperty, Season.SHOW); maintenant tu peux utiliser ces variables au lieu des alias et des jointures, ex : query.addGroup(showProperty + Show.TITLE, showProperty + Show.OVER, showProperty + Show.RUNTIME)... cela va te donner en HQL : GROUP BY E.season.show.title, E.season.show.over, E.season.show.runtime. Attention cette astuce ne marche pas si season ou show sont des collection, dans ce cas les jointures sont indispensables.
Enfin bref, merci Flo et Julien.
Enjoy ;)
_______________________________________________ Topia-users mailing list Topia-users@list.nuiton.org http://list.nuiton.org/cgi-bin/mailman/listinfo/topia-users
-- Florian Desbois <fdesbois@codelutin.com> SSLL Code Lutin http://www.codelutin.com tel : 02 40 50 29 28 Réseau Libre-Entreprise