主要讨论Spring与Hibernate集成中的session问题
转自http://www.iteye.com/topic/733971
1.通过getSession()方法获得session进行操作
总结:
(1)对于getSession(),getSession(false),getCurrentSession()以及getHibernateTemplate()方法而言,如果对其所在方法进行事务控制,那么可以确保在整个方法中只存在一个session,无论你执行了几次CRUD操作,并且所打开的session会在事务结束时自动关闭。
(2)必须对getSession(false)以及getCurrentSession()所在的方法进行事务控制(原因见上述分析)
(3)如果没有对getSession()以及getHibernateTemplate()所在方法进行事务控制,那么如果在方法中进行N次CRUD操作,就会打开N个session,即每次调用getSession()和getHibernateTemplate()方法都会打开新的session。这两个方法的区别在于:getHibernateTemplate()方法结束时会自动关闭连接,而getSession()方法必须手动关闭。
(4)如果在方法中采用SessionFactory的openSession()方法获得连接进行操作,那么无法对其进行事务控制。
(5)一般的开发中,通常采用getHibernateTemplate()方法进行数据库操作, getHibernateTemplate()方法采用模板+回调的机制,进行数据库操作很方便,可以查看(其中session的打开与关闭都是在doExecute方法中进行的):
?
http://lijiejava.iteye.com/blog/667644
http://lijiejava.iteye.com/blog/727249