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

Bar*_*rry 44 hibernate hql fetching-strategy

我试图理解LEFT JOINLEFT JOIN FETCHHibernate 之间的区别.

有谁能解释一下?

谢谢

Rya*_*art 56

"fetch"告诉hibernate现在加载它而不是让它被懒惰地加载.参考指南有一整章涉及这样的事情,以便熟悉它.


Key*_*r00 14

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

第二个概念是什么时候 (获取时间)应该获取它。您可以使用 Hibernate 定义的 6 个属性之一对其进行配置,其中最多的 4 个属性是:eager, lazy, extra lazy, proxy.( hibernate-core )

默认使用 Hibernate:

  • 集合:懒惰选择获取
  • 单值关联:延迟代理获取

加入

JOINor ( LEFT JOIN)只会返回父对象。

加入获取

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

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

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

  • 好读,弗拉德的补充阅读:/sf/answers/4162798601/ (2认同)