首页 > 解决方案 > 休息调用不检索存在的子类实体

问题描述

我正在使用 JPA 存储库从数据库中检索对象列表。如果我不以任何方式访问子类,它们将为空。如果我只是在日志文件中显示它们的数量,它们就不会为空。我不确定为什么会这样。

在下面的代码中,如果我注释掉“for loop”,policy.getFields() 和 policy.getFieldGroups 将为空。为什么会这样?

    log.debug("Request to get all Policies");
    List<Policy> policies = policyRepository.findAll();
    for (Policy policy : policies) {
        log.info("Policy fields group size:{}", policy.getFieldGroups().size());
        log.info("Policy fields size:{}", policy.getFields().size());
    }

    return policies;

标签: springhibernatejpa

解决方案


这称为延迟加载(或延迟初始化),这意味着集合关系将在即将使用时被获取。这是完全正常的行为。如果您每次都需要它,您可以将该关系的加载更改为 EAGER,以便每次都获取这些关系。

这可以通过添加@OneToMany(fetch = FetchType.EAGER)需要加载的字段来完成(此处为字段组和字段)


推荐阅读