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中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

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