天天看點

(原創)org.hibernate.LazyInitializationException: could not initialize proxy - no Session

springboot中使用jpa報錯

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

原因是因為懶加載問題。

具體如下:(轉)

       簡單了解就是因為,你使用了lazy=true,這樣hibernate在從資料庫中調資料的時候是不會把關聯的對象查出來的,而是儲存一個擷取值得方法,在你使用getXXX()調用的時候,hiberante會利用這個儲存的方法去從資料庫中取資料。而往往我們在jsp頁面中使用getXXX()準備展示資料的時候,session早已經在dao中就關閉了

解決方法一般是在web.xml中配置為false。

因為侍boot新手,沒有web.xml不知道這麼修改。原因也找到了,于是找到了簡答的方法。

如下,我本來的代碼:

Product one = productDao.getOne(new Goods("Apple", "XS"));
           

修改後的代碼:

Product one = productDao.findOne(new Goods("Apple", "XS"));
           

注意到了嗎,有get方法變為了find方法。原因是get方法是從session中取,是以發送了上面的lazy報錯,換成find方法後就可以簡答解決這個問題了。效果是一樣的,當然,如果個别情況下不得不用get,隻有去修改web.xml了等方法了。