2010-03-21 181 views
0

我有一个包含2类俱乐部和文章的应用程序。这些在Hibernate中映射为多对多关系。如何创建HQL查询以在多对多关系中返回对象?

因此,hibernate创建了一个名为CLUB_ARTICLE的表,它用它来管理多对多关系。 CLUB和ARTILCE表彼此之间没有直接引用,映射仅在CLUB_ARTICLE表中表示。

我需要创建一个HQL查询,返回一个特定俱乐部的文章列表。所以我需要提供俱乐部ID并找回属于它的物品列表。出于某种原因,我只是无法解决如何做到这一点。任何帮助将非常appriciated!

谢谢。

回答

1

ClubArticle的代码之间的关系是怎样的?当您认为您的HQL时,您需要忘记数据库模式。只有在hibernate映射(注释或xml)中定义的关系才能用于hql。

假设你的映射是bidirectionnal,你有俱乐部的集合称为第俱乐部,你可以这样做:

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

然后设置查询你的俱乐部实体:

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

现在,如果文章没有俱乐部的收藏(列表/集合),则会变得更加复杂。您可以从Club中选择,然后对文章ID进行投影,然后获取它们。不过,我会建议你简单地将一个集合属性添加到Article实体,因为它不会影响数据库模式,并且会减少查询。

+0

如果OP已经有'club'实例,如果关系是双向的,他可以叫'club.getArticles()'。 – 2010-03-21 06:00:35

+0

当然,但问题是如何在HQL中做到这一点。 – 2010-03-21 14:08:43

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

在编写HQL时,您需要考虑对象而不是表的对象和关系。在这里,要检索的Article一个列表给予其ID的特定Club,你可以做这样的事情:

select club.articles from Club c where c.id =:id 
相关问题