Hibernate框架学习(四)——事务

一、回顾事务的概念http://www.cnblogs.com/cxq1126/p/8313600.html

1、特性ACID:原子性、一致性、隔离性、持久性

2、并发问题:脏读、不可重复读、幻|虚读

3、事务的隔离级别:读未提交、读已提交、可重复读、串行化

二、如何在Hibernate中指定数据库的隔离级别

在主配置文件hibernate.cfg.xml中添加一行

三、项目中如何管理事务

规则:业务开始之前打开事务、业务执行之后提交事务,执行过程中出现异常回滚事务

在dao层操作数据库需要用到session对象,在service层控制事务也使用了session对象,要确保dao层和service层使用的同一个session对象。

在hibernate中确保使用同一个session的问题,hibernate已经解决了,开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象。

注意:

  1)调用sf.getCurrentSession()方法必须配合主配置中的一段配置。

 1 //测试getCurrentSession
 2 public class Demo {
 3     @Test
 4     //返回同一个session
 5     public void fun1(){
 6         Session session1 = HibernateUtils.getCurrentSession();
 7         Session session2 = HibernateUtils.getCurrentSession();
 8         
 9         System.out.println(session1==session2);    //true
10     }
11     @Test
12     //返回不同的session
13     public void fun2(){
14         Session session1 = HibernateUtils.openSession();
15         Session session2 = HibernateUtils.openSession();
16         
17         System.out.println(session1==session2);    //false
18     }
19 }

  2)通过getCurrentSession方法获得的session对象,当事务提交时session会自动关闭,不要手动调用close关闭,否则抛出异常。

 Service层修改:

Dao层修改:

posted @ 2018-02-04 17:57  最咸的鱼  阅读(214)  评论(0编辑  收藏  举报