【问题标题】:Does EAGER FetchType populates to its childrenEAGER FetchType 是否填充到其子级
【发布时间】:2021-03-26 05:36:23
【问题描述】:

例如我有以下类结构

class Parent {

fetch = FetchType.EAGER
List<Child> children;
}

class Child {
fetch = FetchType.LAZY
List<SuperChild> superChildren;

}

问题是 当我获取父对象时,例如:

ParentRepository::findById();

superChildren 会因为他们的父母 EAGER 或他们的 LAZY 覆盖而被获取吗?

【问题讨论】:

    标签: java hibernate jpa persistence


    【解决方案1】:

    FetchType 的文档中没有任何内容暗示与关联实体自己的FetchType 有关的任何行为。请注意LAZY 的描述(这是来自 JPA 规范的文档):

    “LAZY 策略是对持久性提供程序运行时的提示,即在首次访问数据时应延迟获取数据。允许实现急切地获取已指定 LAZY 策略提示的数据。”

    因此,作为旁注,一般情况下 LAZY 可能无法得到保证,具体取决于实现提供者。

    Hibernate(最流行的 JPA 实现)将延迟获取 superChildren,因此 Parent#childrenFetchType 无关紧要。我没有尝试过其他实现,但我非常怀疑它会有所不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      相关资源
      最近更新 更多