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

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

谁能解释一下?

谢谢

【问题讨论】:

    标签: hibernate hql fetching-strategy


    【解决方案1】:

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

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

    默认使用休眠:

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

    加入

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

    加入抓取

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-03-11
        • 2012-04-03
        • 1970-01-01
        • 2011-03-12
        • 2019-09-03
        • 2020-03-07
        相关资源
        最近更新 更多