Hibernate 加载所有实体而忽略 LAZY 加载

Hibernate loads all entities ignoring LAZY load

我的应用程序使用 Hibernate 从数据库中检索数据。今天我调试了我的应用程序并偶然发现了 EAGER 负载。

@Table(name = "orders")
@Entity
public class Order implements Serializable {
@OneToMany(fetch = FetchType.EAGER, mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
        private List<DishQuantity> dishes = new ArrayList<>();
}

我把它改为 LAZY load 是这样的:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<DishQuantity> dishes = new ArrayList<>();

当我使用 DAO 从服务调用数据库时,我收到了预期的结果,延迟加载的实体不再可用:

但是当我去查询并尝试使用实体管理器获取实体时,我收到了这个:

看起来 Hibernate 无论如何都会加载所有实体,但在事务关闭后,LAZY 实体会被丢弃,对吧?但无论如何它从数据库中获取了所有实体并且根本没有提高数据库性能。有没有办法强制 Hibernate 即使在事务期间也不加载 LAZY 实体并减少数据库负载?

它们在这两种情况下都是延迟加载的,但是您正在调试器中触发初始化(第一次是在封闭的 Session 关闭后,第二次是在活动 Session 期间)。

您可以enable SQL logging检查数据库中执行了哪些查询。