1. 程式人生 > >this.getsession和this.getHibernateTemplate().getSessionFactory().getCurrentSession()/OpenSession區別

this.getsession和this.getHibernateTemplate().getSessionFactory().getCurrentSession()/OpenSession區別

這個是hibernate與spring整合開發,讓DAO繼承了spring的HibernateDaoSupport,這樣的確能夠提高開發效率 ,但是不夠靈活,而且使DAO層依賴於spring的api,增加了耦合。但是不考慮複用的話還可以。

    下面一個一個的分析: this.getsession實際上是呼叫了父類中的方法獲得session。使用spring管理hibernate的SessionFactory的時候,這個方法會從session池中拿出一session.這樣做有可能有問題,就是超session池連線數的時候,spring無法自動的關閉session。 不推薦使用

     this.getHibernateTemplate().getSessionFactory().getCurrentSession()從spring管理的sessionFactory中建立一個繫結執行緒的session.spring會根據該執行緒的執行情況來自動判斷是關閉session還是延遲關閉。這樣做可以避免手動的管理事務,同時一個執行緒最多開啟和關閉一次session又可以提高程式的效能。 極力推薦使用這種方法 

     this.getHibernateTemplate().getSessionFactory().OpenSession。這種方法從spring管理的sessionFactory中建立一個session,此session不是執行緒繫結的。當執行完一個實務的時候自動關閉session.這種方法不用手動管理事務,但是同一個執行緒多次的開啟和關閉session,浪費系統資源和影響執行效率,正常情況下還是不要用了。