hibernate中獲得session的方式


his.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,浪費系統資源和影響執行效率,正常情況下還是不要用了。

 

Hibernate的SessionFactory提供獲取session的新方法getCurrentSession (獲得與當前線程綁定的session). 內部通過代理封裝,此方式得到的session
不僅和當前線程綁定,也無需手動開關. 默認在事務提交之后,session自動關閉. 需注意的是,必須在事務開啟的前提之下才可使用此種方式獲得的session.
此外hibernate.cfg.xml配置文件中也許配置

<property name="current_session_context_class">thread</property> 基於線程
末了,引入Spring之后.sessionfactory的創建等都交給spring管理.Spring也提供了HibernateTemplate,HibernateDaoSupport這樣的封裝方法.
用戶可以不再考慮session的管理,事務的開啟關閉.只需配置事務即可.
而所謂session關閉后,因延遲加載導致前台無法顯示的問題以往解決方式為強制全部加載,現在也可通過在web.xml中配置
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter來解決.

<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sf</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

具體詳情參照該博主的博客:http://blog.csdn.net/loadhai/article/details/17928361


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM