spring - 休息调用不检索存在的子类实体
问题描述
我正在使用 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;
解决方案
这称为延迟加载(或延迟初始化),这意味着集合关系将在即将使用时被获取。这是完全正常的行为。如果您每次都需要它,您可以将该关系的加载更改为 EAGER,以便每次都获取这些关系。
这可以通过添加@OneToMany(fetch = FetchType.EAGER)
需要加载的字段来完成(此处为字段组和字段)