【问题标题】:How to I create an HQL query to return objects in a many to many relationship?如何创建 HQL 查询以返回多对多关系中的对象?
【发布时间】:2010-03-21 03:46:12
【问题描述】:

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

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

我需要创建一个返回特定俱乐部文章列表的 HQL 查询。所以我需要提供俱乐部 ID 并取回属于它的文章对象列表。出于某种原因,我只是无法弄清楚如何做到这一点。任何帮助都会非常感激!

谢谢。

【问题讨论】:

    标签: java hibernate orm hql


    【解决方案1】:

    ClubArticle在代码中之间是什么关系?当您考虑 HQL 时,您需要忘记数据库模式。只有在 hibernate 映射(注解或 xml)中定义的关系才能在 hql 中使用。

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

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

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

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

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

    【讨论】:

    • 如果 OP 已经有club 实例并且关系是双向的,他可以调用club.getArticles()
    【解决方案2】:
    from Article a join a.clubs c where c.id=:clubid
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-19
        • 2015-03-31
        • 2014-09-03
        • 1970-01-01
        • 2012-05-23
        • 2011-08-21
        • 2013-06-08
        • 2017-12-24
        相关资源
        最近更新 更多