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

时间:2011-07-27 01:41:27

标签: hibernate hql fetching-strategy

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

任何人都能解释一下吗?

由于

2 个答案:

答案 0 :(得分:54)

“fetch”告诉hibernate现在加载它而不是让它被懒惰加载。参考指南有whole chapter处理这些事情,以便熟悉它。

答案 1 :(得分:2)

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

第二个概念是何时 (获取时间)。您可以使用Hibernate定义的6个属性之一来配置它,其中最多4个属性是:eagerlazyextra lazyproxy。({{3 }})

默认使用休眠模式:

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

加入

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

加入获取

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

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

请注意,较少的select语句是休眠和数据库之间往返次数减少的代名词,但不是更好的性能的代名词。