5

如果我们使用 fetching 策略作为“join”,一个单一的 join 查询被触发(通过一个 join 查询组合父和子)并且默认行为等同于lazy="false"。这意味着将立即为父级获取所有子级记录。但是,如果我们标记lazy="true" 会是什么行为?由于连接查询是单一的,所以会延迟获取什么?

4

2 回答 2

10

FetchMode Join 会覆盖惰性属性。它将被简单地忽略。如果您对有关 Fetchmodes 的详细说明感兴趣,请查看此处。这篇文章描述了 Hibernate fetchmodes 和它们产生的输出。

于 2013-10-29T07:37:03.890 回答
0

在集合或单值关联映射上使用 fetch="join",您实际上将避免第二个 SELECT(因此使关联或集合非惰性),只需使用一个“更大”的外部(用于可为空的多对一个外键和集合)或内部(对于非空多对一外键)加入 SELECT 以获取拥有实体和引用的实体或集合。如果您将 fetch="join" 用于特定实体实例的多个集合角色(“并行”),则创建一个笛卡尔积(也称为交叉连接)和两个(惰性或非惰性)SELECT 可能是快点。

使用 lazy="true" on 和映射来启用单个标量值类型属性的延迟加载(有点奇怪的情况)。需要对已编译的持久类进行字节码检测以注入拦截代码。可以在 HQL 中使用 FETCH ALL PROPERTIES 覆盖。

来自https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies。希望有帮助

于 2013-10-29T07:37:25.163 回答