如何创建HQL查询以在多对多关系中返回对象?
问题描述:
我有一个包含2类俱乐部和文章的应用程序。这些在Hibernate中映射为多对多关系。如何创建HQL查询以在多对多关系中返回对象?
因此,hibernate创建了一个名为CLUB_ARTICLE的表,它用它来管理多对多关系。 CLUB和ARTILCE表彼此之间没有直接引用,映射仅在CLUB_ARTICLE表中表示。
我需要创建一个HQL查询,返回一个特定俱乐部的文章列表。所以我需要提供俱乐部ID并找回属于它的物品列表。出于某种原因,我只是无法解决如何做到这一点。任何帮助将非常appriciated!
谢谢。
答
Club
与Article
的代码之间的关系是怎样的?当您认为您的HQL时,您需要忘记数据库模式。只有在hibernate映射(注释或xml)中定义的关系才能用于hql。
假设你的映射是bidirectionnal,你有俱乐部的集合称为第俱乐部,你可以这样做:
String hql = "from Article where clubs = :club";
然后设置查询你的俱乐部实体:
Query q = sess.createQuery(hql);
q.setEntity("club", club);
现在,如果文章没有俱乐部的收藏(列表/集合),则会变得更加复杂。您可以从Club中选择,然后对文章ID进行投影,然后获取它们。不过,我会建议你简单地将一个集合属性添加到Article实体,因为它不会影响数据库模式,并且会减少查询。
答
from Article a join a.clubs c where c.id=:clubid
答
在编写HQL时,您需要考虑对象而不是表的对象和关系。在这里,要检索的Article
一个列表给予其ID的特定Club
,你可以做这样的事情:
select club.articles from Club c where c.id =:id
如果OP已经有'club'实例,如果关系是双向的,他可以叫'club.getArticles()'。 – 2010-03-21 06:00:35
当然,但问题是如何在HQL中做到这一点。 – 2010-03-21 14:08:43