繁体   English   中英

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

[英]How to I create an HQL query to return objects in a many to many relationship?

我有一个包含2类Club和Article的应用程序。 这些在Hibernate中被映射为多对多关系。

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

我需要创建一个HQL查询,该查询返回特定俱乐部的商品列表。 因此,我需要提供俱乐部ID并获取属于它的Article对象的列表。 由于某种原因,我只是无法确定如何做到这一点。 任何帮助将不胜感激!

谢谢。

代码中 ClubArticle之间的关系是什么? 当您认为自己的HQL时,您需要忘记数据库架构。 hql中只能使用在休眠映射(注释或xml)中定义的关系。

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

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

然后在查询中设置您的俱乐部实体:

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

现在,如果Article没有Club的集合(列表/集合),它将变得更加复杂。 您可以从Club中选择并对商品ID进行投影,然后获取它们。 但是,我建议您仅将一个collection属性添加到Article实体,因为它不会影响数据库架构,并且会简化查询。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM