首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate和Spring集成过程中Session的有关问题

2012-09-16 
Hibernate和Spring集成过程中Session的问题getCurrentSession()与openSession()getCurrentSession()与open

Hibernate和Spring集成过程中Session的问题

getCurrentSession()与openSession()
getCurrentSession()与openSession()方法通过Hibernate的SessionFactory获得,两者的区别网上有很多文章已经介绍过,即:

    ①getCurrentSession创建的session会和绑定到当前线程,而openSession不会。???②getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而openSession必须手动关闭??



对于getCurrentSession()方法:
??????? (1)其所在方法必须进行事务控制
??????? (2)Session在第一次被使用的时候,或者第一次调用getCurrentSession()的时候,其生命周期就开始。然后它被Hibernate绑定到当前线程。当事务结束的时候,不管是提交还是回滚,Hibernate也会把Session从当前线程剥离,并且关闭它。假若你再次调用getCurrentSession(),你会得到一个新的Session,并且开始一个新的工作单元。????
??
对于openSession()方法:
???????? 这个方法一般在spring与Hibernate的集成中不直接使用,它就是打开一个session,并且这个session与上下文无关,如果对其所在方法进行事务控制,会发现不起作用,原因就是前面提到的,事务控制必须确保是同一个连接,而openSession()打开的session与上下文无关。这个方法与getSession(),getCurrentSession()以及getHibernateTemplate()等方法的区别在于:后面的几个方法spring可以对其进行控制,如果对它们所在的方法进行事务控制,spring可以确保是同一个连接,而openSession()方法,spring无法对其进行控制,所以事务也不会起作用。

热点排行