首頁  >  文章  >  資料庫  >  為什麼 Spring 和 Hibernate 中的 @Lob 欄位延遲載入失敗?

為什麼 Spring 和 Hibernate 中的 @Lob 欄位延遲載入失敗?

Susan Sarandon
Susan Sarandon原創
2024-11-02 18:28:02364瀏覽

Why Does Lazy Loading Fail for @Lob Fields in Spring and Hibernate?

Spring 和Hibernate 中@Lob 的延遲載入問題

在使用Spring 和Hibernate 的Web 應用程式中,包含檔案相關資料的資料庫記錄是呈現在網頁上。雖然當資料量適中時流程運作順利,但過多的資料量會觸發「OutOfMemoryError」。

作為初始故障排除步驟,將「blobField」屬性設為「null」解決了記憶體問題,這意味著惰性儘管有 @Basic(fetch=FetchType.LAZY) 註解,載入還是無效。

解釋和解決方法

根據 Hibernate 文檔,@Lob 字段本質上是惰性的,並且不需要明確的惰性註釋。但是,資料庫和驅動程式之間的行為不一致。

一種解決方案涉及 Javassist 或 Cglib 等字節碼檢測技術。

推薦解決方案

至為了可靠地解決這個問題,建議重構資料對應。不要利用屬性,而是創建“假”一對一映射。從主類別中刪除 LOB 字段,建立引用相同表格和主鍵但僅包含必要的 LOB 字段的新類別。將這些映射標記為一對一、獲取選擇和惰性 true。這種方法可確保在父物件保留在會話中時延遲載入。

以上是為什麼 Spring 和 Hibernate 中的 @Lob 欄位延遲載入失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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