懶加載異常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session

病症:這是一個lazy使用後的Exception,使用遲時加載,在session(hibernate裏的session),關閉後使用該對象的未加載變量,也就是說session已經關閉,沒有保存到內存中,而後你使用了,致使該異常。web

簡單理解就是由於,你使用了lazy=true,這樣hibernate在從數據庫中調數據的時候是不會把關聯的對象查出來的,而是保存一個獲取值得方法,在你使用getXXX()調用的時候,hiberante會利用這個保存的方法去從數據庫中取數據。而每每咱們在jsp頁面中使用getXXX()準備展現數據的時候,session早已經在dao中就關閉了,咱們該如何解決這種異常呢?spring


解決方法有三種:
1.把lazy設成false,最簡單,可是效率下降。

2.在web.xml中加入以下數據庫

程序代碼:
<filter> 
     <filter-name>hibernateFilter</filter-name> 
     <filter-class> 
     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
     </filter-class> 
</filter>
<filter-mapping> 
     <filter-name>hibernateFilter</filter-name> 
     <url-pattern>*.do</url-pattern> 
</filter-mapping>


3用 left join fetch 或 inner join fetch 語法:
例如:select distinct t from Tuser t left join fetch t.troles role where t.id = :idsession

相關文章
相關標籤/搜索