zoukankan      html  css  js  c++  java
  • hibernate 事务的隔离级别

    脏读
    不可重复读
    幻读
    可序列化(符合事务的四个特性的正常情况 )

    解释:
    脏读:事务A对数据1做了更新,但是还没有来得及提交
    此时事务B对数据1进行了查询获得了事务A更新后的数据,
    但是事务A因为一些原因又进行了回滚,这就导致数据1回到了
    最初状态,那事务B读取的数据就是错误的,这就是脏读

    不可重复读:事务A查询了数据1,然后事务B更新了这个数据并进行了
    提交,然后事务A又读取了这个数据,两个数据不一致,叫做不可重复读

    幻读:事务A查询了a表,里面只有一条数据,然后事务B对a表进行了添加,
    现在表里有两条数据,然后事务A又对表a进行了查询,这时候的查询就有两条数据
    这种叫做幻读(大多数情况下数据库选择的隔离级别就是这里,允许出现幻读
    因为如果要完全符合可序列化,也就是acid 那就表明事务A在执行的时候,其他
    的事务就要等着)



    Hibernate中的隔离级别
    默认设置
    Hibernate.connection.isolation= 4
    1:读操作未提交(Read Uncommitted) 也就是脏读
    2:读操作已提交(Read Committed) 也就是不可重复读
    4:可重读(Repeatable Read) 也就是幻读
    8:可串行化(Serializable)


    可以在hibernate.cfg.xml中配置一行
    <property name="hibernate.connection.isolation">4<property>

    ----------------------------------------------------
    这是在数据库级别进行设置,也可以在代码方面进行设置
    乐观锁
    悲观锁

    乐观锁

    通过version字段(在数据库中插入一个version字段,数据类型要是整型int或者long等)
    或timestamp字段(不推荐,因为在小的时候都有可能会重叠)实现

    当对表数据进行添加和修改时,version字段会改变
    当修改数据时,Hibernate会获取当前的version值,提交当前事务时,
    如果version值和之前获取的不同,那就会抛出org.hibernate.StaleObjectStateException异常。

     注解的形式 

    @Version
    private Integer version;

    xml配置的形式

    <version name="version"/>

    如:

    <class name="User" table="user">
            <cache usage="read-write"/>
            
            <id name="id">
                <generator class="native"/>
            </id>
            
            <property name="username"/>
            <property name="password"/>
            
            <set name="addressSet" cascade="delete" inverse="true">
                <cache usage="read-write"/>
                <key column="userid"/>
                <one-to-many class="Address"/>
            </set>
            <!-- 
            <version name="version" column="xxxx"/>
             -->
        </class>

    悲观锁 :

    当前事务没有完成,其他事务都不能执行
    只需要添加一个参数
    Account account= (Account) session.get(Account.class,1,LockOptions.UPGRADE);



  • 相关阅读:
    CSS Frameworks Collection(css框架收集)
    CSS:IE与Firefox的CSS兼容大全
    一般的 DIV + CSS 三栏式排版
    C#获取与修改HTML DOM元素信息
    101 LINQ Samples
    IE,Firefox,Chrome都可用的阴影效果
    QT中字符串编码的选用
    QT中字符串及其编码
    QT多项目编译顺序
    QT字符串编码知识汇编
  • 原文地址:https://www.cnblogs.com/itliucheng/p/4463478.html
Copyright © 2011-2022 走看看