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 JOIN
和 LEFT JOIN FETCH
之间的区别。
谁能解释一下?
谢谢
【问题讨论】:
【参考方案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 处理这样的事情,很高兴熟悉。
【讨论】:
以上是关于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 对子集执行附加查询