延迟加载如何工作以收集对象?

问题描述 投票:-1回答:1

我有一对多关联,并且FetchType是LAZY。我知道休眠将为延迟加载的实体创建代理对象。但是,如果子实体是Collection类型,它将如何工作?会为每个集合对象创建代理吗?例如:-

 public class Company {
    private String name;    

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private Set<Employee> employees;
 } 
java hibernate jpa set hibernate-mapping
1个回答
1
投票

如果您不参与交易,将抛出LazyInitializationException。这很好,因为您知道此查询必须热切地获取它们。

    如果您在事务中,则休眠将获取您要遍历的每个元素。这是巨大的性能开销,因为您需要触发查询以获取父实体,然后为每个子实体执行一个查询。如果有N个子代,则需要对数据库进行N+1调用,这也称为N + 1 select problem
© www.soinside.com 2019 - 2024. All rights reserved.