Hibernate框架学习——事务
Posted 会飞的咸鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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层修改:
以上是关于Hibernate框架学习——事务的主要内容,如果未能解决你的问题,请参考以下文章