63

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

谁能解释一下?

谢谢

4

2 回答 2

79

“fetch”告诉hibernate现在加载它而不是让它延迟加载。参考指南有一整章处理这些事情,很容易熟悉。

于 2011-07-27T01:46:01.317 回答
17

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

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

默认使用休眠:

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

加入

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

加入抓取

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

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

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

于 2018-12-13T10:13:49.913 回答