[英]Can Spring actuator be used with non-web Spring Boot application?
[英]Hibernate LazyInitializationExceptioin in a "non-web" Spring application
我在控制台應用程序中使用 Spring 3.1 和 Hibernate 4(我正在嘗試這些框架的一些功能及其集成)。
如何在非網絡應用程序中解決 Hibernate LazyInitializationExceptioin
?
我對使用OpenSessionInViewFilter
很感興趣,但對不使用 servlets 的應用程序卻一無所知……哪種方法是解決問題的正確方法?
在將 hibernate 加載的實例返回到您的控制台應用程序的視圖層之前,請始終確保您需要在視圖層中顯示或訪問的實體已初始化。
您可以使用以下方法強制初始化實體:
例如,您必須在視圖層中顯示一個Order
的所有orderDetail
,但您的控制台應用程序只加載一個order
實例。 假設orderDetail
是延遲加載的,在將order
返回給視圖層之前,調用Hibernate.initialize(order.getOrderDetail())
使用fetch join獲取orderDetail
以及導致返回的order
object 的orderDetail
完全初始化的order
:
SELECT order FROM Order order join fetch order.orderDetail
更新:
@OneToMany
上的fetch = FetchType.EAGER
是第三個選項。 會導致如果加載了一個order
,它的orderDetail
也會自動加載並初始化。但是這是全局影響的。 我們通常不會將@OneToMany
的默認延遲獲取計划更改為急切獲取映射元數據,除非它絕對確定要這樣做。 相反,我們使用fetch join
(選項 2)來覆蓋默認的惰性獲取計划,以便為特定用例急切獲取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.