Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 的区别?

Posted

技术标签:

【中文标题】Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 的区别?【英文标题】:Difference between LEFT JOIN and LEFT JOIN FETCH in Hibernate? 【发布时间】:2011-10-13 21:25:35 【问题描述】:

我试图了解 Hibernate 中 LEFT JOINLEFT JOIN FETCH 之间的区别。

谁能解释一下?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用FETCH 来调整您的应用程序性能。它是 Hibernate 的正交概念之一,它回答了 如何 (fetch style) 获取关联的问题。有4种样式:select/subselect/batch/join

第二个概念是when (获取时间)它应该被获取。您可以使用 Hibernate 定义的 6 个属性之一对其进行配置,其中最多 4 个属性是:eagerlazyextra lazyproxy。(hibernate-core)

默认使用休眠:

collection:懒惰的选择抓取 单值关联:延迟代理获取

加入

JOIN 或 (LEFT JOIN) 将返回父对象。

加入抓取

JOIN FETCH(或LEFT JOIN FETCH)将收集所有关联及其所有者对象。这意味着将在同一个选择中检索该集合。这可以通过启用 Hibernate 的统计信息来显示。

(左/外)连接提取非常适合 *ToOne(多对一或一对一)关联。它与非袋子一起使用,但要注意当表的基数很高时可能发生的笛卡尔问题。请注意,在大多数情况下,select 获取样式更快。

请注意,更少的select 语句是hibernate 和数据库之间更少往返的同义词,但不是更好性能的同义词。

【讨论】:

【参考方案2】:

"fetch" 告诉 hibernate 现在加载它而不是让它延迟加载。参考指南有一个whole chapter 处理这样的事情,很高兴熟悉。

【讨论】:

以上是关于Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中,left joininner join以及left join fetch区别(转)

(懒惰)使用 Hibernate Criteria API 的 LEFT OUTER JOIN

Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题

Hibernate left join fetch 对子集执行附加查询

Hibernate中用left join(左外连接)查询映射中没有关联关系的两个表记录问题

sql 中 left join 的使用