【问题标题】:Hibernate HQL: using JOIN to eagerly load child entities?Hibernate HQL:使用 JOIN 急切加载子实体?
【发布时间】:2010-12-06 22:14:21
【问题描述】:

我找到了我想要理解的这个 HQL 查询。评论说LEFT JOIN 导致Hibernate 急切地加载子表中的关联实体,并且需要DISTINCT 修饰符来过滤掉结果集中重复的父实体。这些 cmets 有意义吗?我以前从未见过以这种方式使用联接。

SELECT DISTINCT p FROM Parent AS p
LEFT JOIN p.children AS c
WHERE p.state = 1
ORDER BY p.modified

注意c 未在WHEREORDER BY 子句中使用。

用更简单的查询替换这个查询似乎是安全的:

SELECT p FROM Parent AS p
WHERE p.state = 1
ORDER BY p.modified

但我不确定是否有充分的理由原始查询按原样编写。

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    根据 Hibernate 文档:

    “获取”连接允许使用单个选择来初始化值的关联或集合以及它们的父对象。这在集合的情况下特别有用。它有效地覆盖了关联和集合的映射文件的外连接和惰性声明。

    http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html

    因此,只有“获取”连接会导致引用的集合加载。在您的情况下,您没有“获取”连接,因此我认为不会通过此查询加载子项集合。

    换句话说,是的,您可以将查询替换为第二个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多