OpenSessionInView:Spring Boot 中的一個警示故事
Spring Boot 中的spring.jpa.open-in-view 屬性已成為來源讓很多開發者感到困惑。讓我們深入研究一下它的用途、預設值和潛在後果。
什麼是 OpenSessionInView?
OpenSessionInView (OSIV) 是一項在整個請求期間使 EntityManagerFactory 保持開啟的功能-回應週期。這允許 Hibernate(底層持久化提供者)自動初始化延遲載入的實體,即使交易已提交。
預設值
在 Spring Boot 2.0 和之前,如果未明確設置,則預設啟用 OSIV。這主要是為了向後相容需要 OSIV 才能正常運作的舊 Hibernate 版本。
OSIV 的缺陷
雖然旨在簡化物件初始化,但OSIV 可能會導致顯著的結果效能問題和可擴展性限制:
停用OSIV
要停用OSIV 並恢復正確的資源管理,請設定spring.jpa.open-in-view = false 在您的application .properties中file.
LazyInitializationException
如果停用 OSIV,則在存取延遲載入實體時可能會遇到 LazyInitializationException。若要解決此問題,請在 JPQL 查詢中使用 Hibernate 的 @Fetch 註解或明確急切取得。
結論
OpenSessionInView 似乎是避免延遲初始化異常的便利方法,但其潛在弊大於利。在現代 Spring Boot 應用程式中,應停用 OSIV 以確保最佳效能和資源利用率。
以上是你該使用 Spring Boot 的 OpenSessionInView 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!