Java 如何创建HQL查询以返回多对多关系中的对象?

Java 如何创建HQL查询以返回多对多关系中的对象?,java,hibernate,orm,hql,Java,Hibernate,Orm,Hql,我有一个申请,其中包括2类俱乐部和文章。这些在Hibernate中映射为多对多关系 因此,hibernate创建了一个名为CLUB_ARTICLE的表,用于管理多对多关系。CLUB和ARTILCE表之间没有直接引用,映射仅在CLUB_ARTICLE表中表示 我需要创建一个HQL查询,返回特定俱乐部的文章列表。因此,我需要提供俱乐部id并获取属于它的文章对象列表。出于某种原因,我就是不知道该怎么做。任何帮助都将非常感激 谢谢。俱乐部和守则中的文章之间有什么关系?当您考虑HQL时,需要忘记数据库模式

我有一个申请,其中包括2类俱乐部和文章。这些在Hibernate中映射为多对多关系

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

我需要创建一个HQL查询,返回特定俱乐部的文章列表。因此,我需要提供俱乐部id并获取属于它的文章对象列表。出于某种原因,我就是不知道该怎么做。任何帮助都将非常感激


谢谢。

俱乐部和守则中的文章之间有什么关系?当您考虑HQL时,需要忘记数据库模式。hql中只能使用hibernate映射(注释或xml)中定义的关系

假设您的映射是双向的,并且在本文中有一个名为clubs的Club集合,您可以执行以下操作:

String hql = "from Article where clubs = :club";
然后在查询中设置俱乐部实体:

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

现在,若这篇文章并没有俱乐部的集合(列表/集合),那个么它会变得更复杂。您可以从Club中进行选择,并在文章ID上进行投影,然后获取它们。不过,我建议您只需将集合属性添加到文章实体中,因为它不会影响数据库架构,并且可以简化查询。

在编写HQL时,您需要考虑对象和对象之间的关系,而不是表。在这里,要检索给定id的特定
俱乐部的
文章
列表,您可以执行以下操作:

from Article a join a.clubs c where c.id=:clubid
select club.articles from Club c where c.id =:id

如果OP已经有
club
实例,并且关系是双向的,那么他可以调用
club.getArticles()