在事务的管理中有两种方式
- 在业务层获取Session ,并将Session作为参数传递给Dao
- 可以使用ThreadLocal 业务层获取的Session 绑定到当前线程中,然后Dao中获取Session时,取当前线程
Hibernate帮我们做完了第二种方法,
需要我们做一点配置
在hibernate核心配置中配置如下:
<!--绑定session到本地线程-->
<property name="hibernate.current_session_context_class">thread</property>
由于hibernate5给session提供了三种管理方法 所以值也有三种
- thread:session 对象的生命周期和本地线程绑定
- jta: session 对象的生命周期与jta事务绑定 – 跨数据库操作
- managed:hibernate 委托程序管理session的生命周期
我们拿session时就要使用 使用getCurrentSession()方法
自动关闭不用关闭。
这样的话 就可以保证我们的session是同一个;