您的位置:首页 > 编程语言 > Java开发

JavaEE--SSH--hibernate-对事务的管理

2018-03-05 16:22 363 查看
hibernate对事务的管理:
1.通过session获取事务对象.Transaction transaction = session.beginTransaction();
开启-提交-回滚事务
2.核心配置文件设置事务的隔离级别.
sessionfactory标签中配置事务隔离级别属性:
<property name="hibernate.connection.isolation">4</property> // 1-2-4-8 事务隔离级别
1—Read uncommitted isolation 脏读,不可重复读,虚读都可能发生.
2—Read committed isolation 避免脏读,但是不可重复读和虚读有可能发生.
4—Repeatable read isolation 避免脏读和不可重复读,但是虚读有可能发生的.
8—Serializable isolation 避免脏读,不可重复读和虚读.(串行化的-不可能出现事务并发访问)

通过上面两种方法我们已经配置好了事务.但是在实际应用场景中,事务的控制并不是由持久层(Dao)去做,而是应该在Service层去做.Service层中有可能同时调用多个Dao实现一个业务逻辑的操作.这就会出现一个问题:如何保证Service中开启的事务使用的是同一个session对象?
我们有两个方法去解决:
1.在业务Service层获取Session,将Session作为参数传递给Dao层.(太麻烦,一般不用)
2.通过ThreadLocal将业务层获取的Session绑定到当前线程中,Dao层再获取Session时,就会获取到同一个Session了(推荐使用)
那我们如何使用第二种方式呢.其实hibernate已经替我们封装好了这一切.只需要在主配置文件中SessionFactory标签中加一个属性.
<property name="hibernate.current_session_context_class">thread</property>

注:当我们将事务绑定到当前线程后,就不用关闭Session了.这件事情交给hibernate去做.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: