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: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 !
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
J’ai essayé de donner un alias aux champs recherchésetc. mais Hibernate me retourne une erreur de syntaxe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select goods.goodsId as goodsId, goods.goodsname as goodsName,
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 :
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 ?).
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
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).
Partager