openSession

由openSession、getCurrentSession和HibernateDaoSupport

喜欢而已 提交于 2019-12-03 04:50:48
Spring和Hibernate的集成的一个要点就是对事务的支持,openSession、getCurrentSession都是编程式事务(手动设置事务的提交、回滚)中重要的对象,HibernateDaoSupport则提供了更方便的声明式事务支持。 Hibernate中最重要的就是Session对象的引入,它是对jdbc的深度封装,包括对事务的处理,Session对象通过SessionFactory来管理,openSession和getCurrentSession是管理session的重要的方法。 openSession和getCurrentSession的 根本区别 在于有没有绑定当前线程,所以,使用方法有差异: * openSession没有绑定当前线程,所以,使用完后必须关闭, * currentSession和当前线程绑定,在事务结束后会自动关闭。 关于事务的边界和传播: 通常情况下事务的边界需要设置在业务逻辑处理层中,但是,如果在一个业务中涉及到多个业务逻辑层之间的方法,且需要在同一个事务中运行,那么,这就涉及到了事务的传播性。 如果使用openSession,就要在dao层的方法中传递session,而这种做法是很糟糕的,首先增加了参数的个数,另外,方法是否需要事务,完全是可以当做一种独立的服务抽离出的。 因为currentSession是线程级别的,所以