spring-hibernate整合 事務不起作用

當spring和hibernate 整合後,事務不起作用

解決辦法:通過Spring的SessionFactory的getCurrentSession的方法創建Session


一、首先說一下hibernate中創建用來連接數據庫的Session,有兩種方式。

1.通過Spring的SessionFactory的getCurrentSession的方法創建Session 。

2.通過Spring的SessionFactory的OpenSession的方法創建Session。

getCurrentSession 創建的Session會綁定到當前線程中去,commit或rollback後會,自動關閉Session。

OpenSession 重新開啓一個線程創建Session,需要手動關閉Session,如果不關閉將導致session關聯的數據庫連接無法釋放,最後資源耗盡而使程序當掉。              。

二、而當hibernate利用spring中的綁定事務來配置的時候如下圖:

配置事務是,需要將數據庫中的數據源,注入 HibernateTransactionManager可以說,事務的配置是,針對於數據庫來說的。(我是這麼理解的)

所以,當我們採用OpenSession來創建Session來連接數據庫的話,和事務連接數據庫是兩個線程的操作,所以事務根本不會起作用。

應該採用getCurrentSession進行session的創建。





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