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

解释:
脏读:事务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);

hibernate 事务的隔离级别的更多相关文章

  1. hibernate 事务的隔离级别 5.1

    脏读不可重复读幻读可序列化(符合事务的四个特性的正常情况 ) 解释: 脏读:事务A对数据1做了更新,但是还没有来得及提交 此时事务B对数据1进行了查询获得了事务A更新后的数据, 但是事务A因为一些原因 ...

  2. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  3. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. 事务之二:spring事务(事务管理方式,事务5隔离级别,7个事务传播行为,spring事务回滚条件)

    事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...

  5. MySQL事务学习-->隔离级别

    MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...

  6. SQL Server事务的隔离级别

    SQL Server事务的隔离级别 ########## 数据库中数据的一致性 ########## 针对并发事务出现的数据不一致性,提出了4个级别的解决方法:  隔离级别  第一类丢失更新  脏读 ...

  7. 事务的隔离级别及mysql对应操作

    /* 本次高并发解决之道 1,更改事务隔离级别为 read uncommitted读未提交 2,查询前设定延迟,延迟时间为随机 50-500 微秒 3,修改数据前将 超范围作为 限定修改条件 事务是作 ...

  8. MySQL(26):事务的隔离级别出现问题之 幻读

    1. 幻读 幻读(Phantom Read)又称为虚读,是指在一个事务内两次查询中数据条数不一致,幻读和不重复读有些类型,同样是在两次查询过程中,不同的是,幻读是由于其他事务做了插入记录的操作,导致记 ...

  9. MySQL(25):事务的隔离级别出现问题之 不可重复读

    1. 不可重复读 所谓的不可重复读(Non-Repeatable Read)是指事务中两次查询的结果不一致,原因是在查询的过程中其他事务做了更新的操作. 例如,银行在做统计报表的时候,第一次查询a账户 ...

随机推荐

  1. mybatis 中if标签判断boolean 的写法。

    mybatis 的if 比较标签在比较数值时可以这样写: <if test="value=0"> </if> 在比较字符串时可以这么写: <if te ...

  2. [Codechef November Challenge 2012] Arithmetic Progressions

    题意:给定一个序列,求多少个三元组满足ai+ak=2*aj(i<j<k). 题解:原来叉姐的讲义上有啊..完全忘掉了.. 首先这个式子很明显是一个卷积.我们有了FFT的思路.但是肯定不能每 ...

  3. skynet中的各种锁

    最近读skynet c语言部分的源码,发现有好多锁的使用和gcc提供的一些原子操作.看到这些东西,对于我这个newbee来说实在有些hold不住.但为了了解并进一步掌握,还是决定好好分析一下.不足之处 ...

  4. Educational Codeforces Round 15 A, B , C 暴力 , map , 二分

    A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. hibernate学习(1)

    对象的持久化 狭义的理解,“持久化”仅仅指把对象永久保存到数据库中 广义的理解,“持久化”包括和数据库相关的各种操作 -保存:把对象永久保存到数据库中 -更新:更新数据库中对象的状态 -删除:从数据库 ...

  6. 配置JSP模板

  7. java中base64

    // 将 s 进行 BASE64 编码 public static String getBASE64(String s) { if (s == null) return null; return (n ...

  8. fabric 安装及简单使用 (centos6)

    fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装epel源 1 wget -O /etc/yum.repos.d/epel.repo http: ...

  9. handsontable 给单元格自定义属性

    setHotAttr(hotObj,rowHeader,colHeader){// 给handsongtable绑定行列属性 console.log(hotObj); console.log(colH ...

  10. 唯一id UUID

    public static String getUUID() { String s = UUID.randomUUID().toString(); return s.substring(0, 8) + ...