解決spring boot hibernate 懶載入的問題
spring boot 是快速構建微服務的新框架。
對於資料訪問問題可以直接使用jpa技術,但是在單元測試發現spring jpa存在hibernate懶載入問題。
但是spring-boot沒有xml配置檔案所以現在網路上好多的解決方案並不能適用在spring boot框架中。在遇到該問題苦苦查詢後終於無意中發現瞭解決方案。
Spring application using JPA with Hibernate,lazy-loading issue in unit test
英文不好沒有細看,但是可以看到在spring-boot專案中如何通過application設定hibernate的配置選項。
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
在spring.jap.properties後面可以接hibernate的各種配置,然後陪孩子會被自動注入的hibernate例項中。
然後再次執行單元測試全部通過,不在出現懶載入異常。
補充知識:Spring boot + hibernate 懶載入報錯:could not initialize proxy - no Session
專案背景
舊專案改造成Spring boot 專案,使用了舊配置的方式引入了hibernate(非jpa)
問題描述
後臺“物件.另一個物件”時報錯:could not initialize proxy - no Session,出現了懶載入問題。
原因分析
出現該錯誤的原因是Hibernate使用sessionFactory來管理session,我們每進行一次資料庫操作時都會新建一個session物件,當我們操作完成後,hibernate就會在dao層立即關閉該session。所以當我們操作類中另一個類的具體屬性時,因為session已經關閉,就會報錯。
解決方法
引入對應spring-orm的jar包,在spring boot 的啟動類中新增這段程式碼:
@Bean public OpenSessionInViewFilter openSessionInViewFilter(){ return new OpenSessionInViewFilter(); }
注意:以上僅僅適合傳統方法引入hibernate,如果你使用的是jpa,那麼需要改為
@Bean public OpenEntityManagerInViewFilter openEntityManagerInViewFilter(){ return new OpenEntityManagerInViewFilter(); }
以上這篇解決spring boot hibernate 懶載入的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。