你應該在視圖模式中使用 Hibernate 的 Open Session 嗎?
Hibernate 在視圖模式中開啟會話的缺點
Hibernate 在視圖中開啟會話(OSIV) 模式在整個請求的整個過程中維護一個開啟會話生命週期。雖然這種方法看起來很方便,但它有幾個陷阱:
1。缺乏事務控制
OSIV 允許在託管事務之外進行資料操作,從而導致資料不一致。 UI 渲染期間執行的每個語句都以自動提交模式發生,這會增加 I/O 開銷並可能損害資料庫效能。
2.混合關注點
OSIV 模糊了服務層和 UI 層之間的分離,因為語句是由兩者產生的。這使得測試變得複雜,並且使得隔離層變得更加困難。
3. N 1 查詢效能問題
OSIV 將 UI 層限制為導航關聯,這可能會導致 N 1 查詢問題。雖然 Hibernate 提供了 @BatchSize 和 FetchMode.SUBSELECT 等緩解措施,但它們會影響預設的獲取計劃,並且可能並非適用於所有場景。
4.資源管理
OSIV 在整個 UI 渲染階段保持資料庫連線開啟。這種延長的連接租用可能會在連接池中造成擁塞,從而限制可擴展性和吞吐量。
OSIV 的替代方案
要在解決 OSIV 的限制的同時避免LazyLoadExceptions,請考慮以下這些替代策略:
- 渴望取得:在服務層中急切地初始化所有必需的關聯,以避免延遲載入錯誤。
- FetchMode.JOIN:在查詢中使用 FetchMode.JOIN 來急切地載入特定關聯。
- 批次取得:利用@BatchSize批次取得關聯並改善
- DTO 投影: 建立封裝相關資料的DTO(資料傳輸物件),而不包含惰性關聯。
在 Spring Boot 中停用 OSIV
在 Spring Boot 中,OSIV 預設為啟用。要停用它,請將以下屬性新增至您的application.properties 設定檔:
spring.jpa.open-in-view=false
透過停用OSIV,您可以更好地控制資料擷取、確保事務完整性並提高應用程式效能。
以上是你應該在視圖模式中使用 Hibernate 的 Open Session 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
