【发布时间】:2011-10-13 21:25:35
【问题描述】:
我试图了解 Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 之间的区别。
谁能解释一下?
谢谢
【问题讨论】:
标签: hibernate hql fetching-strategy
我试图了解 Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 之间的区别。
谁能解释一下?
谢谢
【问题讨论】:
标签: hibernate hql fetching-strategy
您可以使用FETCH 来调整您的应用程序性能。它是 Hibernate 的正交概念之一,它回答了 如何 (fetch style) 获取关联的问题。有4种样式:select/subselect/batch/join。
第二个概念是when (获取时间)它应该被获取。您可以使用 Hibernate 定义的 6 个属性之一对其进行配置,其中最多 4 个属性是:eager、lazy、extra lazy、proxy。(hibernate-core)
默认使用休眠:
加入
JOIN 或 (LEFT JOIN) 将仅返回父对象。
加入抓取
JOIN FETCH(或LEFT JOIN FETCH)将收集所有关联及其所有者对象。这意味着将在同一个选择中检索该集合。这可以通过启用 Hibernate 的统计信息来显示。
(左/外)连接提取非常适合 *ToOne(多对一或一对一)关联。它与非袋子一起使用,但要注意当表的基数很高时可能发生的笛卡尔问题。请注意,在大多数情况下,select 获取样式更快。
请注意,更少的select 语句是hibernate 和数据库之间更少往返的同义词,但不是更好性能的同义词。
【讨论】:
"fetch" 告诉 hibernate 现在加载它而不是让它延迟加载。参考指南有一个whole chapter 处理这样的事情,很高兴熟悉。
【讨论】: