hibernate隔离级别出现的原因

隔离级别出现的原因,是防止事务并发操作数据出现异常。

事务并发出现数据异常,这些异常都会在持久层出现。只是各个框架处理的方式不同

下面就说一下hibernate持久层框架的出现的数据异常。

[b]更新丢失[/b]:eg事务A用银行账号,取了一部分钱(没提交),于此同时事务B向同一账号存入了一部分钱,并成功提交。现在A提交事务不成功,回滚了。这个时候账号的钱,就是账号最初钱的数目,B事务存入的钱就不见了。

[color=darkred]隔离级别(Read UnCommitted):[/color]读取未提交的插入,和更新的数据这样的话就防止了更新丢失

带着这个条件在去想上面那种情况,A在回滚的时候,A知道了B事务存入了钱,在回滚的话,钱的数目就会是 原始数目+存入的数目

[b]脏读[/b]:事务之间可以相互得到未提交同一数据,这其实是个很可怕的事情,这个是真正值得注意的问题,eg:事务A向账号中存入一部分钱,还没提交。同时B也在向同一账号存钱,不过提交之后会滚了。而现在A可以读到未提交事务的钱的数目,A提交成功
现在钱的数目=最初原始数目+A存入+B存入(B没成功,这样也能行的话,银行亏大发了,那我们这些小百姓,就乐了)

怎么去解决???

[color=orange]读已提交的数据(Read Committed):[/color]事务之间只能读已经成功更新,插入的数据。这样就避免了。

[b]不可重复读:[/b]事务两次查询的结果不同 eg:事务A查询了一次账号,现在自己电话来了,就在ATM机前打电话。这个时候事务B往同一账号存入了钱,并成功提交。A电话打完了,再一查(我的个天)钱生崽了。钱增多了。这个时候A就有的犯晕,这个是怎么回事。

[color=olive]可重复读(Repeatable Read)[/color]:事务职能相互读成功提交,而不能读以成功提交的数据

[b]虚读(幻读):[/b]带条件的一些查询,两次查询出现复合条件的数据数目变化不一样。
出现的原因,在两次查询之间,其他的事务成功插入了数据。注意“可重复读:不能读成功更新的数据,但可以读成功插入的数据”。


[color=green]串行化(Serializable):[/color]这个是最安全的级别:为什么。在高并发的情况下,一次只能容许一个事务对相应的数据进行操作。对数据进行相应的锁定
想一下,一次一个事务,虚读这种情况自然就不存在。

没有什么事情是绝对的好,你换来了数据的安全,但数据操作效率就是最慢的,应用不同的级别,看你的场合而定。找寻一种折中最适合的方法。

默认的隔离级别:跟数据库有关(本人认为一般来说读已提交数据的隔离级别 数据安全已经不错了。性能也可以)

hibernate 只是显示的提供了设置隔离级别
<property name=”hibernate.connection.isolation”>4</property> //可填1,2,4(可重复读),8

[b]总结:[/b]

隔离级别 更行丢失 脏读 不可重复读 虚读

Read UnCommitted ------y n n n

Read Committed---------n y n n

Repeatable Read--------n y y n

Serializable-----------y y y y

事务的处理应满足 ACID原则
原子性(Atomic):事务是一个操作单元,要吗一起成功,要吗一起回滚

一致性(Consistent):事务不能破换数据库的完整性和业务逻辑的一致性。成功与否,你不能破换数据的完整性。eg:一个事务不成功,破换了其他的数据,那就乱套了

隔离性(Isolated):事务并发操作同一数据,事务之间有自己的数据空间。一个事务不会看到其他事务修改的一半的数据,能看到的是,提交之前,或好后的数据,只是为了保证数据的正确性。
持久性(Durable):一但固化到数据库,系统是重启或是什么,数据还在。一直可以使用
[b]欢迎大家指正[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值