一、回顾事务的概念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()方法必须配合主配置中的一段配置。

 //测试getCurrentSession
public class Demo {
@Test
//返回同一个session
public void fun1(){
Session session1 = HibernateUtils.getCurrentSession();
Session session2 = HibernateUtils.getCurrentSession(); System.out.println(session1==session2); //true
}
@Test
//返回不同的session
public void fun2(){
Session session1 = HibernateUtils.openSession();
Session session2 = HibernateUtils.openSession(); System.out.println(session1==session2); //false
}
}

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

Service层修改:

Dao层修改:

最新文章

  1. SQLite3源程序分析之分析器的生成
  2. VMware虚拟网络编辑器
  3. [小菜随笔]python tkinter实现简单的ping命令
  4. EF – 6.一对一关联
  5. 行为识别笔记:HOG,HOF与MBH特征(转载)
  6. HTML5 JS API 本地存储LocalStorage基本操作
  7. HTTP简单理解
  8. 如何用SVN进行个人版本管理
  9. android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
  10. innerText、innerHtml与value
  11. obj-c编程03:多个参数方法的定义
  12. 免费SSL证书Let's Encrypt(certbot)安装使用教程
  13. Getting started with Processing 第十三章——延伸(1)
  14. cocos2d-x游戏开发 跑酷(三) 人物跑动
  15. java Socket和ServerSocket多线程编程
  16. AMD、CMD、UMD 模块的写法
  17. 模拟器下的虚拟sd卡添加文件
  18. Linux下C与Mysql的混合编程
  19. Ubuntu 16.04安装cuda7.5 GCC
  20. [z]【Bash命令行处理】[详解]

热门文章

  1. [Intermediate Algorithm] - Sum All Primes
  2. 应用一:Vue之开发环境搭建
  3. C51端口结构和工作原理(转)
  4. ZBrush细说3D海盗角色的创建艺术
  5. 数据库_数据分片与mycat服务
  6. HILLSTONE sg6000 g5150 怎么恢复出厂设置
  7. 理解Faster-RCNN 中的Anchor
  8. 洛谷P1231 教辅的组成 最大流
  9. Git 本地项目添加多个远程仓库
  10. K3 新单到老单关联字段的添加