我想了解Hibernate中LEFT JOIN
和LEFT JOIN FETCH
之间的区别。
有人能解释一下吗?
谢谢
我想了解Hibernate中LEFT JOIN
和LEFT JOIN FETCH
之间的区别。
有人能解释一下吗?
谢谢
FETCH
来调整应用程序的性能。这是Hibernate的正交概念之一,回答了关于关联获取方式的问题。(获取样式)有四种获取样式:select
/ subselect
/ batch
/ join
。
第二个概念是关于获取时间的问题。(获取时机)您可以使用Hibernate定义的6个属性之一进行配置,其中最常用的4个属性是:eager
、lazy
、extra lazy
和proxy
。(hibernate-core)
Hibernate默认使用:
Join
JOIN
或(LEFT JOIN
)将仅返回父对象。
Join Fetch
JOIN FETCH
(或LEFT JOIN FETCH
)将收集所有关联项以及它们的所属对象。这意味着集合将在同一次选择中检索。可以通过启用Hibernate的统计信息来显示此过程。
A (left/outer) join fetch在*ToOne(多对一或一对一)关联中非常有用。它用于非集合属性,但要注意当表的基数高时可能出现笛卡尔问题。请注意,在大多数情况下,select
获取样式速度更快。
请注意,少使用select
语句等同于Hibernate和数据库之间的往返次数更少,但这不等同于更好的性能。