首頁 > Java > java教程 > 我應該在視圖策略中使用 Hibernate 的 Open Session 嗎?

我應該在視圖策略中使用 Hibernate 的 Open Session 嗎?

Linda Hamilton
發布: 2024-12-29 04:44:10
原創
161 人瀏覽過

Should I Use Hibernate's Open Session in View Strategy?

Hibernate Open Session in View 實踐的缺點

概述

Hibernate 的O有幾個缺點,特別是在多JVM 環境中以及需要立即提交事務時。儘管它在單一 JVM 應用程式中提供了便利,但專家建議不要使用它。

OSIV 的問題

OSIV 的主要問題源自於其非正統的資料擷取方法。它在 UI 渲染期間保持持久性上下文打開,從而允許根據需要初始化惰性關聯。這會帶來多個缺點:

  • 渲染時自動提交:服務層事務完成後,UI 渲染觸發的任何後續語句都會以自動提交模式執行,從而放置不必要的在資料庫伺服器上載入。
  • 模糊的關注點:服務層和 UI 層之間的關注點分離變得模糊,使得測試和隔離更加困難。
  • N 1 查詢的潛力:UI 層限制可能導致 N 1 查詢問題,進而影響效能。
  • 連接租用問題: OSIV 在整個UI 渲染過程中持有資料庫連接,限制事務吞吐量並可能導致池問題

避免LazyLoadExceptions

除了依賴OSIV,還可以採用替代策略來防止LazyLoadExceptions:

  • 取得關聯:在期間明確初始化關聯服務方法呼叫。
  • 唯讀取得:將關聯清單標記為唯讀,以防止意外代理。
  • 批次取得:使用 @ BatchSize 和 FetchMode.SUBSELECT 用於最佳化取得。
  • 資料存取層(DAL) 查詢: 製作精確定義資料擷取要求的自訂 DAL 查詢。

在 Spring Boot 中停用 OSIV

在 Spring Boot 中,OSIV預設為啟用。要停用它,請將以下行新增至 application.properties 檔案:

spring.jpa.open-in-view=false
登入後複製

這將停用 OSIV,允許開發人員以更合適的方式處理 LazyLoadExceptions。

以上是我應該在視圖策略中使用 Hibernate 的 Open Session 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板