關於ssh開發中的no session問題
阿新 • • 發佈:2019-02-17
在ssh開發中,在dao層採用延時載入的查詢方法,如果使用將hibernate託管給spring執行查詢,在業務層開啟事務,將查詢的結果直接傳遞到頁面,會報出no session 異常。
這是因為延時載入時,session查詢到的是一個代理物件,只有id。當我們要使用查詢內容的時候,會重新呼叫session查詢。
這是因為延時載入時,session查詢到的是一個代理物件,只有id。當我們要使用查詢內容的時候,會重新呼叫session查詢。
但是在我們將該代理物件傳遞到頁面之前,session就已經關閉了,當我們呼叫代理物件時,需要通過session重新查詢,但是此時session無法獲取到了。
異常資訊如下:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
解決方案:
在web.xml中配置延長session存活時間的過濾器OpenSession
<filter>
<filter-name>OpenSession</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>