Le Thu, 16 Sep 2010 00:36:43 +0200, Julien NICOLAS <nicolas.julien.cg@gmail.com> a écrit :
Voilà le contexte : Je souhaite charger une Workstation et le Flow qu'elle contient qui n'a pas de date de fin. Le chargement de la workstation se passe plutôt bien avec le code suivant :
// Chargement des informations de la workstation. WorkstationDAO wsDAO = EasyFlowDAOHelper.getWorkstationDAO(transaction); Workstation workstation = wsDAO.findByName(pName);
La où cela ce complique c'est pour le chargement du Flow. J'ai utilisé le code fournis précédemment par Florian et à peine adapté qui semble correspondre à notre besoin :
TopiaQuery tQuery ;
tQuery = fDAO.createQuery("F"); // Ajout de l'entite Workstation au FROM tQuery.addFrom(Workstation.class, "W"); // F doit être contenu dans la collection de Flow de la workstation // en HQL : F IN elements(W.flow) tQuery.addInElements("F", "W." + Workstation.PROPERTY_FLOW); // Recherche pour la workstation d?sir? tQuery.addEquals("W", workstation); // Condition de nullité tQuery.addNull("F." + Flow.PROPERTY_END);
tQuery.execute(transaction)
La question qui me démange est la suivante :
tQuery.execute nous renvoie une liste. Mais comment la manipuler ? dois-je simplement l'ajouter à la collection Flow de la workstation ou c'est mal et le meilleur moyen est tout autre ?
Il est préférable d'utiliser les méthodes d'execution de requete depuis le DAO pour garder le typage des résultats (findAllByQuery, findByQuery).
Sinon il n'y a pas un autre moyen de faire le chargement de notre liste de Flow contenu dans notre workstation en passant par notre workstationDAO ? Ou alors directement préciser dans le FlowDAO que le Flow que l'on cherche doit être lié à la workstation ?
Si en fait ce serait plus simple d'utiliser le workstationDAO, la requête en HQL : SELECT W FROM Workstation W JOIN FETCH W.flow F WHERE F.end IS NULL; A lire (doc de référence HQL) : http://docs.jboss.org/hibernate/core/3.3/reference/fr/html/queryhql.html Note : en relisant la doc je viens de m'apercevoir du WITH plutot que WHERE dans une jointure qui serait plus pertinent dans ton cas (même si le résultat sera probablement identique). Un ajout à faire dans la méthode addJoin de la TopiaQuery. Il faudrait que je fasse des essais.
Une autre question, j'ai cherché l'aide en ligne de Topia et je n'arrive pas à mettre la main sur quelque chose approchant l'exhaustivité... C'est normal car la doc n'est pas terminé où tout simplement je ne vais pas au bon endroit : http://topia.labs.libre-entreprise.org/topia/topia-persistence/howto.html
Obsolète, regarde bien la version qui ne correspond pas du tout à celle que tu utilise (2.1.6 contre 2.4). D'ailleurs ToPIA n'est plus hébergé sur le labs mais sur www.nuiton.org/projects/show/topia La doc de TopiaQuery : http://nuiton.org/embedded/topia/topia-persistence/TopiaQuery.html
Si il y a moyen de la renseigner, on est prêt à s'y coller au fil des blocages que nous rencontrons. Nous pouvons écrire un p'tit bout de doc à chaque fois et vous la mettez en ligne si celle-ci est pertinente et vous plais.
Compléter la FAQ peut être intéressant, pour le moment tu peux envoyer des mails ou patch svn pour intégrer des bouts de doc (un outil est en cours de mise en place pour modifier la documentation mais il faut un droit de commit).
Voilà, nous rentrons dans la partie qui vas demander des requêtes de plus en plus complexe pour nos entité alors on risque de poser quelques autres questions... en espérant retrouver rapidement nos adresse du domaine pour reprendre la liste de TopiaUser. A deux, être bon dans tous les domaines c'est pas facile mais on se bat ! Chaque nouveau pas est une bataille remportée. Il nous reste pas mal de chemin mais on ne se laisse pas abattre.
N'hésite pas a bien parcourir la doc HQL d'hibernate et celle de TopiaQuery, normalement tu devrais pouvoir facilement passer du SQL au HQL à la TopiaQuery ce qui devrait répondre à la plupart des problématiques :) Mais si tu as des questions je suis toujours prêt à t'aider !
Merci à vous les Lutins pour Topia et EUGene (entre autre) qui nous facilitent le codage... tout en nous faisant mal à la tête quand on réfléchi comme avant => connecté directement à la base de données alors que c'est mal et qu'il nous faut déréfléchir ! (...oui déréfléchir ca fait mal à la tête !) Merci aussi pour la logistique et l'aide salvatrice.
Julien et Guillaume. Nomaka
-- Florian Desbois <fdesbois@codelutin.com> SSLL Code Lutin http://www.codelutin.com tel : 02 40 50 29 28 Réseau Libre-Entreprise