为什么Hibernate在FetchType.Eager映射中查找子进程时加载父实体

时间:2012-06-16 18:24:02

标签: hibernate jpa

使用:Hibernate 4

在存在FetchType.Eager映射的父子关系中,我注意到Hibernate会随时加载父实体,并对子进行EntityManager.find。这似乎有点浪费。父元素的“幕后”加载会在持久化上下文中产生额外的SELECT和额外对象。此外,它forces the app to address the parent-child association when removing a child

为什么Hibernate会这样做?这是JPA规范的强制要求吗?

1 个答案:

答案 0 :(得分:0)

它来自规范,在加载实体时必须获取具有eager fetch策略的持久属性:

  

如果所有属性都包含,则认为实体已加载   FetchType.EAGER - 无论是明确指定还是默认 - (包括   已加载关系和其他集合值属性)   从数据库或由应用程序分配。属性与   可能已加载或未加载FetchType.LAZY。