Hibernate HQL:如何使用JOIN来预加载子实体?

3

我发现了一个HQL查询,我正在努力理解它。注释中说LEFT JOIN会导致Hibernate急切地加载子表中关联的实体,而DISTINCT修改器需要用于过滤结果集中重复的父实体。这些注释有道理吗?我以前从未见过这种使用方式。

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

注意,在WHEREORDER BY子句中不使用c

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

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

但我不确定原始查询是否有一个充分的理由被写成这样。

1个回答

3
根据Hibernate文档:
“fetch”连接允许使用单个选择初始化关联或值集合及其父对象。这在集合的情况下特别有用。它有效地覆盖了映射文件中关联和集合的外部连接和延迟声明。

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

所以只有“fetch”连接会导致引用的集合加载。在您的情况下,您没有“fetch”连接,因此我认为孩子们的集合不会通过这个查询加载。
换句话说,是的,您可以用第二个查询替换该查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接