隔离级别出现的原因,是防止事务并发操作数据出现异常。
事务并发出现数据异常,这些异常都会在持久层出现。只是各个框架处理的方式不同
下面就说一下hibernate持久层框架的出现的数据异常。
更新丢失:eg事务A用银行账号,取了一部分钱(没提交),于此同时事务B向同一账号存入了一部分钱,并成功提交。现在A提交事务不成功,回滚了。这个时候账号的钱,就是账号最初钱的数目,B事务存入的钱就不见了。
隔离级别(Read UnCommitted):读取未提交的插入,和更新的数据这样的话就防止了更新丢失
带着这个条件在去想上面那种情况,A在回滚的时候,A知道了B事务存入了钱,在回滚的话,钱的数目就会是 原始数目+存入的数目
脏读:事务之间可以相互得到未提交同一数据,这其实是个很可怕的事情,这个是真正值得注意的问题,eg:事务A向账号中存入一部分钱,还没提交。同时B也在向同一账号存钱,不过提交之后会滚了。而现在A可以读到未提交事务的钱的数目,A提交成功
现在钱的数目=最初原始数目+A存入+B存入(B没成功,这样也能行的话,银行亏大发了,那我们这些小百姓,就乐了)
怎么去解决???
读已提交的数据(Read Committed):事务之间只能读已经成功更新,插入的数据。这样就避免了。
不可重复读:事务两次查询的结果不同 eg:事务A查询了一次账号,现在自己电话来了,就在ATM机前打电话。这个时候事务B往同一账号存入了钱,并成功提交。A电话打完了,再一查(我的个天)钱生崽了。钱增多了。这个时候A就有的犯晕,这个是怎么回事。
可重复读(Repeatable Read):事务职能相互读成功提交,而不能读以成功提交的数据
虚读(幻读):带条件的一些查询,两次查询出现复合条件的数据数目变化不一样。
出现的原因,在两次查询之间,其他的事务成功插入了数据。注意“可重复读:不能读成功更新的数据,但可以读成功插入的数据”。
串行化(Serializable):这个是最安全的级别:为什么。在高并发的情况下,一次只能容许一个事务对相应的数据进行操作。对数据进行相应的锁定
想一下,一次一个事务,虚读这种情况自然就不存在。
没有什么事情是绝对的好,你换来了数据的安全,但数据操作效率就是最慢的,应用不同的级别,看你的场合而定。找寻一种折中最适合的方法。
默认的隔离级别:跟数据库有关(本人认为一般来说读已提交数据的隔离级别 数据安全已经不错了。性能也可以)
hibernate 只是显示的提供了设置隔离级别
<property name=”hibernate.connection.isolation”>4</property> //可填1,2,4(可重复读),8
总结:
隔离级别 更行丢失 脏读 不可重复读 虚读
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):一但固化到数据库,系统是重启或是什么,数据还在。一直可以使用
欢迎大家指正
分享到:
相关推荐
Hibernate 事务隔离级别 深入探究 在 Hibernate 中,事务隔离级别是指数据库系统提供的一种机制,以解决并发事务带来的问题。为了确保数据库的可靠性和一致性,Hibernate 提供了四种事务隔离级别,分别是 ...
让我们深入了解一下这两个类以及它们如何处理事务传播特性和隔离级别。 首先,HibernateTemplate是Spring对Hibernate原生Session的一个包装,它提供了一种更安全、方便的方式来执行常见的Hibernate操作。与直接使用...
本文主要关注于使用Hibernate进行事务管理和设置事务隔离级别的知识。Hibernate是一个流行的Java ORM(对象关系映射)框架,它简化了数据库操作,同时也提供了对事务的管理。 首先,我们需要理解事务的基本概念。...
Hibernate的Session_flush与隔离级别代码详解 Hibernate 是一个基于Java的 ORM(Object-Relational Mapping)工具,提供了将 Java 对象映射到关系数据库的能力。其中 Session_flush 和隔离级别是两个重要的概念。 ...
这意味着,当你的应用程序与数据库进行交互时,其行为遵循数据库定义的事务隔离级别,而真正的事务支持取决于底层数据库的实现。 #### 三、事务并发处理 Hibernate 提供了两种主要的并发控制机制: 1. **乐观锁...
本文将深入探讨Hibernate的Flush过程,以及它如何与数据库事务和隔离级别相互作用。 首先,我们需要明确什么是Hibernate的Flush操作。Flush是Hibernate将内存中的对象状态同步到数据库的过程。当Session中的对象被...
- **事务管理**:理解Hibernate如何处理JTA和JDBC事务,以及如何配置事务隔离级别。 - **懒加载和代理**:研究如何实现关联对象的延迟加载,以及Hibernate的代理对象机制。 - **事件监听器**:探索EntityListener和...
Hibernate还允许开发者通过配置设置不同的事务隔离级别,以满足不同应用场景下的需求。常见的隔离级别包括: - `READ_UNCOMMITTED` - `READ_COMMITTED` - `REPEATABLE_READ` - `SERIALIZABLE` 这些级别的选择取决...
以上只是Hibernate众多知识点的一部分,实际面试中可能涉及更多细节,如级联操作、事务隔离级别、延迟加载机制、乐观锁和悲观锁的区别等。熟悉并理解这些内容对于通过Hibernate相关的面试至关重要。
例如,对于读多写少的场景,乐观锁和较高的事务隔离级别(如Repeatable Read)可能是更好的选择。而对于写操作频繁的情况,悲观锁和更低的隔离级别可能更合适。 总的来说,理解并熟练掌握Hibernate的事务和并发控制...
2. **事务管理**:在新版本的方言中,对事务的处理进行了优化,支持更灵活的事务隔离级别,提高了并发控制的效率和数据的一致性。 3. **索引和约束**:方言更新可能涉及到对索引和表约束的处理,确保了在创建和管理...
本篇文章将深入探讨Hibernate中的事务管理,包括其核心概念、事务的隔离级别、事务的提交与回滚以及源码分析。 ### 1. 事务核心概念 事务是数据库操作的基本单位,它保证了一组操作的原子性、一致性、隔离性和持久...
- 注意事务的隔离级别和回滚规则,确保数据一致性。 - 避免在循环中进行大量的数据库操作,尽量批量处理。 7. **学习资源** - 官方文档:提供详细的API参考和教程。 - 示例代码:通过实际的项目或样例代码来...
Hibernate支持JDBC和JTA两种事务管理方式,可以根据应用需求选择合适的事务隔离级别和回滚策略。 6. Hibernate与Spring整合: 在IBMHibernateAndSpring.ppt中,可能讲解了如何将Hibernate集成到Spring框架中,...
总结起来,Spring和Hibernate的事务处理涉及了Spring的声明式事务管理、事务的传播行为、隔离级别以及回滚规则等概念。通过整合这两者,我们可以构建高效、健壮的企业级应用程序,确保数据的完整性和一致性。了解并...
它还可能增强了对JPA 2.1规范中定义的新的事务隔离级别的支持。 最后,Hibernate的4.5.1版本可能对日志系统进行了调整,提供了更好的调试信息和日志级别控制,帮助开发者在遇到问题时更快地定位和解决问题。 总的...
Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。开发者可以根据应用场景选择合适的隔离级别。此外,...
Hibernate是Java领域中一款强大的对象关系映射框架,它允许开发者用面向对象的...通过理解并熟练应用多对一、一对一和一对多映射,以及级联操作和事务隔离级别,我们可以更好地利用Hibernate提升Java应用的开发效率。
Hibernate支持JTA和JDBC两种事务管理方式,允许开发者根据应用需求选择合适的事务隔离级别和回滚策略。在3.1.x版本中,对事务处理的异常处理和回滚逻辑进行了细化,提高了系统的稳定性和可靠性。 七、方言支持 ...