Session is closed ;nested exception is org.hibernate.SessionException: Session is closed解決方案

 

關於Session is closed 的問題,目前碰到三種情況,同時有三種解決方案;

 

 

、通過getSession()方法獲得session進行操作造成的session關閉。

 

這種方式獲得的session在方法執行結束之後不會自動關閉連接,也就是說我們必須通過session.close()或者releaseSession(session)來手動進行關閉,否則會造成內存泄露或者連接耗盡等問題。

 

如果對進行事務控制,那麼spring框架會自動爲我們關閉session,此種情況(session.close())下,會拋出異常:

  1.  org.springframework.orm.hibernate3.HibernateSystemException: Session is closed; nested exception is org.hibernate.SessionException: Session is closed   
  2. …   
  3. org.hibernate.SessionException: Session is closed  

解決方案:提示session已經關閉。在代碼中通過releaseSession(session)的方法來關閉session,則不會拋出異常

 

參考:http://blog.csdn.net/xiangsuixinsheng/article/details/6451752

 

二、getHibernateTemplate 和 getSession 操作造成的session關閉

在進行兩張以上的表操作的時候,同時調用了 getHibernateTemplate 和 getSession 操作數據 ,就出現了異常:

org.springframework.orm.hibernate3.HibernateSystemException: Session is closed; nested exception is org.hibernate.SessionException: Session is closed

org.hibernate.SessionException: Session is closed

 

因爲在 getSession 裏面是手動設置關閉的 session,getHibernateTemplate的session是系統把我們關閉的,所以當你事務裏面調用了兩張模式,就會造成session關閉。

解決方案:全部統一使用getHibernateTemplate操作數據,這樣session就由系統關閉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章