• 07_Hibernate多事务并发运行时并发问题检索方式


    什么是事务?

    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。

    事务就是逻辑上的一组操作,要么全都成功,要么全都失败

    事务特性?

    原子性:任何事务都是一个整体,不可分割,要么一起成功执行,要么一起失败回退

    一致性:必须从一个正确的状态直接切换到另一个正确的状态(例如: 组成1个事务 可能由增、删、改、查四种操作,一致性就是他们要么同时全部成功,要么同时全部失败。成功与失败的操作保持一致。)

    隔离性:一个会话看不到另一个会话未提交的事务操作

    持久性:提交事务以后,事务操作会被持久化到数据库中,不可回退,别的会话可以看到事务操作的结果

    如果不考虑事务的隔离性引发一些安全性问题?

    读问题:

     脏读:一个事务读到另一个事务未提交数据.

     不可重复读:一个事务读到另一个事务已经提交数据(update),导致查询结果不一致.

     虚读:一个事务读到另一个事务已经提交的数据(insert),导致查询结果不一致

    写问题:

    丢失更新

    概念:

    案列:

    设置事务的隔离级别:

    避免三种读的问题:

    设置事务的隔离级别:

    未提交读:以上三种读问题 都有可能发生.

    已提交读:避免脏读,但是不可重复读和虚读有可能发生.

    重复读:避免脏读和不可重复读,但是虚读是有可能发生.

    串行的:可以避免以上三种读问题.

    在Hibernate中设置事务的隔离级别:

    在核心配置文件中:

    <!-- 配置事务隔离级别  -->

            <property name="hibernate.connection.isolation">4</property>

    ANSI 事务隔离级别

    ANSI SQL 标准定义了隔离级别,但并不是SQL数据库独有.JTA也定义了同样的隔

    离级别.级别越高,成本越高

    隔离级别

    含义

    READ_UNCOMMITED 读未提交         1

    允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读

    READ_COMMITTED

    读已提交      2

    允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生

    REPEATABLE_READ

    可重复读      4

    对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。

    SERIALIZABLE

    串行话         8

    完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。

     

    设置隔离级别

    每个数据库连接都有默认的隔离级别,通常是读已提交或可重复读.可以通

    过数据库配置设置,也可在应用程序中设置.例如Hibernate:

    hibernate.connection.isolation = 4

    1—Read uncommitted isolation

    2—Read committed isolation

    4—Repeatable read isolation

    8—Serializable isolation

    注意:* Hibernate不可能改变在受管环境下由应用服务器提供的数据库连接

          的隔离级别,只能通过改变应用服务器配置的方式来改变.

        * 设置隔离级别是全局选项,会影响所有的连接和事务.有时需要为某个特定

          事务指定更多的限制.

    丢失更新解决

    悲观锁

    乐观锁

     

    悲观锁解决丢失更新

    乐观锁解决丢失更新:

  • 相关阅读:
    SQL中的全局变量和局部变量(@@/@)
    C# 委托Delegate(一) 基础介绍&用法
    internal in C#
    用代码块在new对象时set属性
    MySql与对应的Java的时间类型
    快速获取当天0点0分0秒(00:00:00)
    IsNullOrWhiteSpace与IsNullOrEmpty
    svn服务器配置 for mac
    CornerStone配置SVN,HTTP及SVN简单使用说明
    svn配置
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767533.html
Copyright © 2020-2023  润新知