• 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);



  • 相关阅读:
    Enterprise Solution 开发框架功能点
    设置Form窗体中的控件的属性
    Enterprise Solution 生成实体数据访问接口与实现类型 Code Smith 6.5 模板文件下载
    Enerprise Solution Main 启动方法源代码
    Enterprise Solution 2.3
    .NET 程序启动调试器 .NET 测试代码耗费时间
    代码拼写检查
    编码原则:不变量/前置条件/后置条件
    金融:收益利率计算器
    技术人生:本周改进计划
  • 原文地址:https://www.cnblogs.com/itliucheng/p/4463478.html
Copyright © 2020-2023  润新知