zoukankan      html  css  js  c++  java
  • 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层修改:

  • 相关阅读:
    前端开发小结(持续更新)
    UDP 通讯及内部分析(合集)
    困扰我三天的问题
    Clang Format Style Options (.clang-format 配置文件文档)
    关于共享库的那些事儿
    如何在VMWare的NAT模式下使用traceroute(解析vmnat的行为)
    Linux网络配置
    Ansible Ad-Hoc命令集
    Ansible基础使用
    Ansible部署及配置介绍
  • 原文地址:https://www.cnblogs.com/cxq1126/p/8407103.html
Copyright © 2011-2022 走看看