Hibernate中LEFT JOIN和LEFT JOIN FETCH的区别是什么?

73

我想了解Hibernate中LEFT JOINLEFT JOIN FETCH之间的区别。

有人能解释一下吗?

谢谢

2个回答

89

"fetch"告诉Hibernate现在加载它而不是让它懒加载。参考指南有一个完整章节来处理这样的事情,熟悉它是很好的。


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

第二个概念是关于获取时间的问题。(获取时机)您可以使用Hibernate定义的6个属性之一进行配置,其中最常用的4个属性是:eagerlazyextra lazyproxy。(hibernate-core

Hibernate默认使用:

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

Join

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

Join Fetch

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

A (left/outer) join fetch在*ToOne(多对一或一对一)关联中非常有用。它用于非集合属性,但要注意当表的基数高时可能出现笛卡尔问题。请注意,在大多数情况下,select获取样式速度更快。

请注意,少使用select语句等同于Hibernate和数据库之间的往返次数更少,但这不等同于更好的性能。


1
好文章,Vlad 的附加阅读:https://dev59.com/LGQm5IYBdhLWcg3wrAiX#59468551 - jumping_monkey
当你说“along with their owner object”时,所指的“owner object”是指最初查询的项目,还是指连接表中的项目? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接