IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Résultat d'un requête multi-table [HQL]


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Résultat d'un requête multi-table
    Bonjour à tous,

    Je travaille avec Hibernate et Spring dans mon application, et je ne parviens pas à récupérer le résultat d’une requête menée sur deux tables différentes.

    J’ai deux tables : Goods{goodsId, goodsName, price,…} et GoodsList{glistId, goodsId, slistId, quantity}, où Goods.goodsId = GoodsList.goodsId.

    Je souhaite récupérer pour chaque ligne GoodsId, GoodName, Quantity (vous l’aurez compris c’est une liste de courses ^^).

    Du coup je fais la commande qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select goods.goodsId, goods.goodsname, goodslist.quantity 
    from Goods as goods, Goodslist as goodslist, 
    where goods.goodsId = goodslist.goodsId
    Cette requête me retourne une List de [Ljava.lang.Object;. En explorant cette liste avec le débuggeur, je me rends compte que chaque objet comprend bien trois attributs avec les bonnes valeurs recherchée. Seul problème, ces attributs n’ont pas de nom, donc je n’arrive pas à y accéder !

    J’ai essayé de donner un alias aux champs recherchés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select goods.goodsId as goodsId, goods.goodsname as goodsName,
    etc. mais Hibernate me retourne une erreur de syntaxe.

    J’ai aussi essayé de caster directement la requête dans un objet GoodsCollection créer pour l’occasion (composé de trois attributs nommés goodsId, goodsName et quantity, avec un constructeur basique qui prend ces trois paramètres et les getters et setters nécessaires). La requête donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new GoodsCollection (goods.goodsId, goods.goodsname, goodslist.quantity) 
    from Goods as goods, Goodslist as goodslist, 
    where goods.goodsId = goodslist.goodsId
    Hélas, Hibernate me retourne une erreur comme quoi il n’arrive pas à trouver la classe GoodsCollection, que j’ai pourtant importée dans le fichier exécutant la requête (peut-être un problème de mapping ?).

    Côté technique, cette requête est lancée à partir d’un fichier GoodsCollectionsDAO.java que j’ai créé, à qui un bean Session Factory a bien été attribué dans applicationContext.xml, et j’utilise la commande getHibernateTemplate().find(queryString); pour récupérer l’objet (queryString contenant les requêtes citées plus tôt). Lorsque je fais une requête sur une unique table (eg. Goods), cela fonctionne parfaitement et me retourne une liste de goods avec les valeurs recherchées en attributs, donc le problème vient vraiment de la gestion de la jointure.

    Merci d’avoir lu jusqu’au bout, et merci d’avance pour votre aide, je suis ouvert à toutes les suggestions ! (et je précise aussi que j’ai lu les autres topics à ce sujet dans le forum mais que je ne suis pas parvenu à solutionner le problème).

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    si tu veux avoir accès à tes résultats via leur nom, dans une Map, alors il te faut appliquer un ResultTransformers à ta Query.
    tu dois modifier ta classe DAO (je pense), il te faut ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<?> list = session.createQuery(query).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci pour la reponse !
    Finalement j'avais trouve la solution avant de reregarder ici, et il fallait juste que je precise le package dans la requete afin de caster directement>

    Ainsi,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select new hibernate.GoodsCollection (goods.goodsId, goods.goodsname, goodslist.quantity) 
    from Goods as goods, Goodslist as goodslist, 
    where goods.goodsId = goodslist.goodsId
    fonctionne parfaitement et me retourne une liste d'objets GoodsCollection avec les bonnes valeurs aux bons endroits.

    Merci tout de meme pour la reponse, ca pourra me resservir par la suite !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Affichage du résultat d'une requête multi-table sur plusieurs pages
    Par leaston dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2011, 16h19
  2. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  3. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  4. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21
  5. enregistrer le résultat d'une requête comme table, comment fait-on ?
    Par Monbasinstinct dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/02/2007, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo