【什麼是Hibernate懶加載異常】
我們所說的懶加載也被稱爲延遲加載,它在查詢的時候不會立刻訪問數據庫,而是返回代理對象,當真正去使用對象的時候纔會訪問數據庫,可以有效的降低數據庫訪問次數和內存使用量。懶加載爲Hibernate中比較常用的特性之一,Hibernate 通過默認採取懶加載機制來降低系統的內存開銷,提高系統性能。但這也使很多初學者使用Hibernate時容易出現懶加載異常。
【出現懶加載異常的原因】
這個異常出現的原因主要是使用懶加載機制加載數據時,hibernate在從數據庫中調數據的時候是不會把關聯的對象查出來的,而是保存一個獲取值得方法,在你使用 getXXX()調用的時候,hiberante會利用這個保存的方法去從數據庫中取數據。而往往我們在jsp頁面中使用getXXX()準備展示數據的時候,而此時session已關閉,所以就會出現異常,如圖所示:
【懶加載異常解決方案】
1、lazy設成false,
利用lazy=false來解決問題,這種方法是很好用,但是在實際的過程並不實用,因爲這就不能使用懶加載帶來的好處了,違背了Hibernate默認使用懶加載的初衷。
2、自己寫過濾器,實現OpenSessionInView。
3、使用Spring提供的OpenSessionInViewFilter過濾器。
4、使用Spring提供的OpenSessionInViewInterceptor