2010-03-21 7 views
0

J'ai une application qui comprend 2 classes Club et Article. Ceux-ci sont mappés dans Hibernate comme une relation de plusieurs à plusieurs. En conséquence, Hibernate a créé une table appelée CLUB_ARTICLE qui lui permet de gérer la relation many-to-many. Les tables CLUB et ARTILCE n'ont aucune référence directe les unes aux autres et le mappage est uniquement représenté dans la table CLUB_ARTICLE.Comment créer une requête HQL pour renvoyer des objets dans une relation plusieurs à plusieurs?

J'ai besoin de créer une requête HQL qui renvoie une liste d'articles pour un club particulier. Je dois donc fournir l'identifiant du club et récupérer une liste d'objets article qui lui appartiennent. Pour une raison quelconque, je ne peux tout simplement pas savoir comment faire cela. Toute aide serait très appréciée!

Merci.

Répondre

1

Quelle est la relation entre Club et Articledans le code? Vous devez oublier le schéma de la base de données lorsque vous pensez à votre HQL. Seules les relations définies dans le mappage hibernate (annotation ou xml) peuvent être utilisées dans hql.

En supposant que votre carte est bidirectionnelle et vous avez une collection de club appelé les clubs à l'article, vous pouvez faire quelque chose comme:

String hql = "from Article where clubs = :club"; 

Ensuite, configurez votre entité club dans la requête:

Query q = sess.createQuery(hql); 
q.setEntity("club", club); 

Maintenant, si Article n'a pas de collection (liste/ensemble) de Club, cela devient plus compliqué. Vous pouvez sélectionner Club et faire une projection sur les ID d'article, puis les récupérer. Je suggérerais cependant que vous ajoutiez simplement une propriété de collection à l'entité Article car cela n'affecterait pas le schéma de base de données et cela faciliterait les requêtes.

+0

Si l'OP a déjà l'instance 'club' et si la relation est bidirectionnelle, il peut simplement appeler le 'club.getArticles()'. –

+0

Bien sûr, mais la question était de savoir comment le faire en HQL. –

0
from Article a join a.clubs c where c.id=:clubid 
0

Vous devez penser objet et la relation entre les objets, et non des tables, lors de l'écriture de votre HQL. Ici, pour récupérer une liste de Article pour un particulier Club donné son identifiant, vous pouvez faire quelque chose comme ceci:

select club.articles from Club c where c.id =:id 
Questions connexes