java-“非网络” Spring应用程序中的Hibernate LazyInitializationExceptioin
作者:互联网
我在控制台应用程序中使用Spring 3.1和Hibernate 4(我正在尝试这些框架及其集成的某些功能).
如何在非Web应用程序中解决Hibernate LazyInitializationExceptioin?
我已经谈过使用OpenSessionInViewFilter的问题,但是没有涉及不使用servlet的应用程序…
哪个是解决问题的正确方法?
解决方法:
在将由hibernate加载的实例返回到控制台应用程序的视图层之前,请始终确保已初始化需要在视图层中显示或访问的实体.
您可以使用以下方法强制初始化实体:
例如,您必须在视图层中显示“订单”的所有orderDetail,但您的控制台应用程序仅加载订单实例.假设orderDetail是延迟加载的,则在将订单返回到视图层之前,请调用Hibernate.initialize(order.getOrderDetail())
>使用fetch join来获取orderDetail以及导致返回的order对象的orderDetail完全初始化的订单:
SELECT order FROM订单订单加入获取订单.orderDetail
更新:
@OneToMany上的fetch = FetchType.EAGER是第三个选项.这将导致如果订单被加载,其orderDetail也将被自动加载和初始化.但这会全局影响.我们通常不会更改默认的@OneToMany懒惰获取计划,以便急于获取映射元数据,除非绝对确定要这样做.取而代之的是,我们使用访存联接(选项2)来覆盖默认的懒惰访存计划,以针对特定的用例急切地进行访存.
标签:hibernate,lazy-loading,spring,java 来源: https://codeday.me/bug/20191101/1983860.html