1. 程式人生 > >關於ssh開發中的no session問題

關於ssh開發中的no session問題

在ssh開發中,在dao層採用延時載入的查詢方法,如果使用將hibernate託管給spring執行查詢,在業務層開啟事務,將查詢的結果直接傳遞到頁面,會報出no 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>