首頁 >Java >java教程 >Hibernate Open Session in View:使用或不使用?

Hibernate Open Session in View:使用或不使用?

Linda Hamilton
Linda Hamilton原創
2024-12-06 01:30:13725瀏覽

Hibernate Open Session in View: To Use or Not to Use?

Hibernate Open Session in View:一種有爭議的實踐

Open🎜>

Open🎜>

OSIV 的問題

OSIV 提出了一些挑戰:

  • OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV🎜> OSIV 保持會話期地開放,繞過典型的交易生命週期。這可能會導致意想不到的後果,例如資料一致性問題。
  • 資料庫效能下降:保持會話開啟會對資料庫造成壓力,因為在回應處理期間執行的任何其他語句(例如,惰性關聯初始化)以自動提交模式發出。
  • 模糊層分離: OSIV 模糊了業務層和 UI 渲染階段之間的關注點分離,使得應用程式的測試和維護變得困難。
  • 增加連線租用時間:會話可以保持開放狀態延長時間,限制資料庫連線池的資源。

替代方案策略

為了避免這些問題,開發者可以採用替代策略:

  • 顯式初始化惰性關聯:使用Join 初始化服務層中的惰性關聯Fetch 或FetchMode.SUBSELECT。
  • 建立單獨的 DAO查詢: 為 UI 層編寫特定的 DAO 查詢,這些查詢專門用於僅獲取必要的關聯。
  • 使用視圖投影: 建立僅傳回所需的基本欄位的投影UI 而不是完整的實體。
  • 使用 FetchMode.LAZY 和 EAGER Loading: 設定FetchMode.LAZY 用於不立即需要的實體,FetchMode.EAGER 用於必須預先載入的關聯。

在 Spring Boot 中停用 OSIV

Spring Boot 啟用 OSIV預設。若要停用它,請在 application.properties 檔案中設定以下屬性:

spring.jpa.open-in-view=false
此設定可確保 Hibernate 會話在每個服務層事務後關閉,從而防止與 OSIV 相關的潛在缺陷。

以上是Hibernate Open Session in View:使用或不使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn