首页 > 解决方案 > Hibernate 初始化一个组/实体集合

问题描述

我有一个在页面中获取实体的查询。每个页面包含 100 个实体。对于这 100 个实体,我需要获取一些惰性获取的嵌套实体。

发生的情况是我为主要实体执行了 1 个 SELECT,然后为嵌套实体执行了 100 个 SELECT。

我正在寻找一种方法来批量初始化这 100 个嵌套的,因此我总共有 1 个 SELECT 用于主实体,1 个用于嵌套。

我的结构如下,如果不改变我更喜欢(我们在 EAGER fetches 上遇到了很多问题)

public class MyMainEntity {
    private NestedEntity nested;

    @Override
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL,  orphanRemoval = true)
    @JoinColumn(foreignKey = @ForeignKey(name = "exFK_Nest_Enth"))
    public NestedEntity getNested() {
        ...
    }

有没有办法做到这一点Hibernate.initialize()

标签: javaspringhibernate

解决方案


默认情况下,休眠最新版本遵循JPA 2.0 规范

与以下的关系:

ToMany: Lazy
ToOne: Eager

但如果你使用的是旧版本的 Hibernate,所有关系默认都带有Lazy

在这种情况下,当您想尝试检索子关系时,请使用JOIN FETCH,例如:

Select m from MyMainEntity m JOIN FETCH m.nested;

推荐阅读