gpt4 book ai didi

java - "non-web"Spring 应用程序中的 Hibernate LazyInitializationExceptioin

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:47 25 4
gpt4 key购买 nike

我在控制台应用程序中使用 Spring 3.1 和 Hibernate 4(我正在尝试这些框架的一些功能及其集成)。

如何解决非网络应用程序中的 Hibernate LazyInitializationExceptioin

我对使用 OpenSessionInViewFilter 很感兴趣,但对不使用 servlet 的应用程序一无所知...哪种方法才是解决问题的正确方法?

最佳答案

在将 hibernate 加载的实例返回到控制台应用程序的 View 层之前,请始终确保您需要在 View 层中显示或访问的实体已初始化。

您可以使用以下方法强制初始化实体:

  1. Hibernate.initialize() :

    例如,您必须在 View 层中显示一个Order 的所有orderDetail,但您的控制台应用程序只加载一个order实例。假设 orderDetail 是延迟加载的,在将 order 返回给 View 层之前,调用 Hibernate.initialize(order.getOrderDetail())

  2. 使用 fetch join获取 orderDetail 以及 order 导致返回的 order 对象的 orderDetail 完全初始化:

    SELECT order FROM Order order join fetch order.orderDetail


更新:

@OneToMany 上的

fetch = FetchType.EAGER 是第三个选项。这会导致如果加载了一个order,它的orderDetail也会被自动加载和初始化。但这会影响全局。我们通常不会将 @OneToMany 的默认延迟获取计划更改为急切获取映射元数据,除非它绝对确定要这样做。相反,我们使用 fetch join(选项 2)来覆盖默认的延迟获取计划,以便为特定用例急切获取。

关于java - "non-web"Spring 应用程序中的 Hibernate LazyInitializationExceptioin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com