zoukankan      html  css  js  c++  java
  • 具体解释Hibernate中的事务

     

     1.前言

    上一篇博客解说了Hibernate中的一级缓存,属于Session级别的。这篇博客解说一下Hibernate中的事务机制。

    有关事务的概念。请參照通俗易懂数据库中的事务


     2.怎样处理Hibernate中的事务

    我们知道数据库中的事务,会造成一些影响。比方脏读、不可反复读、幻读。

    那么怎样解决这些问题呢?

    1.隔离级别设置

    通过设置数据库的隔离级别能够消除一些影响。请參照博客通俗易懂数据库中的事务

    在hibernate中也有四种隔离级别,各自是

    1—Read uncommitted isolation

    2—Read committed isolation

    4—Repeatable read isolation

    8—Serializable isolation

    假设要设置hibernate的事务隔离级别的话,直接加入例如以下语句就可以

    <span style="font-family:SimSun;font-size:18px;"><!-- 设置事务隔离级别 -->
    		<property name="hibernate.connection.isolation">4</property></span>


    2.丢失更新怎样解决

    悲观锁

    採用数据库内部锁的机制。在一个事务操作数据时。为数据加锁。还有一个事务无法訪问。例如以下所看到的:

    <span style="font-family:SimSun;font-size:18px;">Customer customer = (Customer) session.load(Customer.class, 1,LockMode.UPGRADE); </span>

    採用上述后,在查询数据时 加入排它锁,默认生成的SQL语句例如以下

    select * from customers for update; 


    解释:採用排他锁的话。一旦锁住,别人就无法訪问。


    乐观锁

    乐观锁与数据库无关。在数据表中为数据加入版本号字段,每次数据改动都会导致版本号号+1



    分析,正如上图所看到的,每一个事务之前都会先去拿一下版本号字段,当改动完毕提交时,会再去核对一下眼下拿到的版本号字段与数据库是否一致,假设不一致的话就会报错。

    用的时候仅仅需在定义中增加版本号字段就可以

    <span style="font-family:SimSun;font-size:18px;"><!-- 定义版本号字段 -->
    		<!-- name是属性名 -->
    		<version name="version"></version>
    </span>




  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6888415.html
Copyright © 2011-2022 走看看