1. 程式人生 > 程式設計 >解決spring boot hibernate 懶載入的問題

解決spring boot hibernate 懶載入的問題

spring boot 是快速構建微服務的新框架。

對於資料訪問問題可以直接使用jpa技術,但是在單元測試發現spring jpa存在hibernate懶載入問題。

解決spring boot 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 懶載入的問題

補充知識: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 懶載入的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。