hibernate事物

hibernate事务的传播,有三种情况是不可能规避的。第一种脏数据读取,不可重复数据读取,幻读。

脏数据:就是一个事务A处理过一条数据,保存在session中,还没有提交,另一个事务B从session中拿到这条数据,去处理。事务A突然回滚了,这条数据并没有存入数据库中,从而事务B拿到这样一条数据,就称为脏数据。

 

不可重复数据读取:就是事务A对数据库中同一条数据进行两次以上查询,每次查询的结果都不一样。这就叫不可重复读取。例如:事务A读取一条用户信息,根据名字小明,去查小明的年龄。第一次,读取的时候,小明的年龄为22,读取完后,事务B将小明的年龄改为21岁,事务A在去读取的时候,小明的年龄为21岁了。

 

幻读:它其实跟不可冲重复读取类似。它是事务A根据相同条件对数据库进行多次查询,每次查询出来的结果集不一样。例如:事务A根据用户年龄为22的,去查数据库中所有符合的用户。第一次,查询出来的结果集为22个用户,读取完后,事务B插入一个叫小明小伙子,年龄为22岁,事务A再去读取的时候,结果集为23个用户。

 

Hibernate事物隔离级别分为Serializable,Repeatable Read, Read Committed,Read Uncommitted。

                   Read Uncommitted:又称为可读未提交,他可以防止更新丢失,但可能出现脏数据  ,重复读数据,幻读数据。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。

                Read Committed:又称为可读提交,它可以防止脏数据,但可能出现 重复数据 ,幻读数据。这种事务级别是经常在项目开发中用到的。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

                Repeatable Read:又称为可重复读取,它可以防止脏数据,重复数据  ,但有可能出现幻读数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

                Serializable:又称为序列化,也就是说数据库中任何一条数据,只要事务A访问它,它就被锁定了,其他事务B,C,D,等都不能并发(同时)访问该条数据,一直到A事务完成对该条数据的操作,事务B,C, D,等才能依次去访问。说白了,就是事务A,B,C,D排队去访问该数据,一个一个来。这种事务级别是最高的,最安全的,但却是最消耗数据库性能的。 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值