我想了解Hibernate中LEFT JOIN
和LEFT JOIN FETCH
之间的区别。
任何人都能解释一下吗?
由于
答案 0 :(得分:54)
“fetch”告诉hibernate现在加载它而不是让它被懒惰加载。参考指南有whole chapter处理这些事情,以便熟悉它。
答案 1 :(得分:2)
您可以使用FETCH
来调整应用程序性能。这是Hibernate的正交概念之一,它回答了提取关联的问题如何 (提取样式)。有4种样式:select
/ subselect
/ batch
/ join
。
第二个概念是何时 (获取时间)。您可以使用Hibernate定义的6个属性之一来配置它,其中最多4个属性是:eager
,lazy
,extra lazy
,proxy
。({{3 }})
默认使用休眠模式:
加入
JOIN
或(LEFT JOIN
)将仅 返回父对象。
加入获取
JOIN FETCH
(或LEFT JOIN FETCH
)将收集所有关联及其所有者对象。这意味着将在同一选择中检索该集合。这可以通过启用Hibernate的统计信息来显示。
(左/外)联接获取非常适合* ToOne(多对一或一对一)关联。它与非袋子一起使用,但是要注意,当表的基数很高时,可能会发生笛卡尔问题。请注意,在大多数转换中,select
提取样式更快。</ p>
请注意,较少的select
语句是休眠和数据库之间往返次数减少的代名词,但不是更好的性能的代名词。