事务的概念
事务是访问数据库时,可能更新数据库中各种数据项的一个程序执行单元,用来确保数据的完整性,避免数据库中的数据在不正确的操作下引起的错误更改。
事务的4个特性
1.原子性。指事务执行单元是一个不可分割的单元,这些单元要么都执行,要么都不执行。
2.一致性。指无论执行了什么操作,都应该保证数据的完整性和业务逻辑的一致性。
3.隔离性。在事务执行过程中,多个执行单元间操作的数据都是其它单元没有操作或者操作结束后的数据,保证每一个执行单元操作的数据都有完整的数据空间。
4.持久性。事务结束后,执行单元操作的数据被保存在数据库中,这些数据的保存状态是永久性的,不会因为系统故障而消失。
Hibernate框架中支持两种事务处理方式
(1)JDBC事务处理(2)JTA(JavaTransactionAPI)事务处理
这两种事务处理方式默认情况下都是关闭的,可以通过配置开启事务管理,如果不进行配置,会默认使用JDBC事务。
(1)编程过程中应用JDBC事务管理的流程
1.实例化Configure类读取配置文件或者属性文件
2.获取sessionFactory实例
3.通过sessionFactory获得session实例
4.通过session.beginTransaction()获得事务Transaction对象
5.开始事务,进行数据操作
6.提交事务,数据处理结束后提交事务
7.回滚事务,如果数据处理出现异常则回滚事务,恢复原始数据
8.提交事务,关闭session
(2)编程过程中应用JTA事务管理的流程
概念--JTA是J2EE事务服务的标准解决方式,通过容器来控制事务。主要应用在多数据库操作的分布式系统中。JTA事务处理首先创建事务处理对象,然后实例化Session,它的事务生命周期要比session的生命周期长。另外,JTA事务处理和JDBC事务处理不能同时使用。流程如下:
1.创建JTA事务对象
2.开始事务
3.获得session并编写操作数据的方法
4.关闭session
5.提交事务
6.如果遇到到异常事件则回滚事务
事务的并发控制?
首先,什么是并发?在Hibernate应用中,并发主要是指同一个时间段内多个事务共同请求同一个资源。对于并发如果不进行相应的控制,将产生一系列的问题。
其次,并发会产生哪些问题?
(1)第一类丢失更新:当两个或多个事务同时更新同一资源时,第一个事务已经更新了数据,而第二个事务由于被中断而撤消了事务,导致第一个事务也被撤消,那么数据将恢复到原始的状态。
(2)脏读:当两个或多个事务同时操作一个资源时,第一个事务更新了数据但未提交,此时第二个事务读取了该条数据并进行了处理,此时由于第一个事务被某种原因撤消了,那么第二个事务处理的数据就称之为脏数据。
(3)虚读:虚读是由于当前的一个事务查询到了另一个事务新插入的数据而引起的,当第一个事务查询了数据库的记录数时,第二个事务向数据库中增加了一条数据,改变了当前的记录数目,那么第一个事务获得的数据就是虚读的数据,该数据与数据库中的实际数据不相同。
(4)不可重复读:当第一个事务修改数据时,第二个事务在它的提交事务的前后,两次读取了第一个事务所修改的数据,导致第二个事务两次读的数据不匹配。
(5)第二类丢失更新:它是不可重复读的一个特例,当多个事务同时读取到了一条资源记录,分别根据自身的逻辑进行处理,最后分别提交事务。问题发生在最后提交的事务会覆盖前面所有提交的事务的数据,导致数据最终的完整性被破坏。
并发控制的解决方案?
为了解决在事务并发过程中出现的问题,Hibernate提供了一种特殊的处理方式----锁。锁有两种形式:悲观锁和乐观锁。
悲观锁:认为所有的事务都在请求当前事务正在处理的资源,因此将正在处理的数据资源上锁,其它所有事务都不可以访问上锁的资源。只有当前的事务提交后,其它事务才可以访问刚刚被提交的数据。Query类和Criteria类的 setLockMode()方法及Session类的load()和lock()方法都可以进行加锁。锁定模式如下:
乐观锁:认为访问数据库的事务很少发生数据访问错误等问题。当数据出现了不一致的状态时,Hibernate采用版本检查和时间戳等技术来实现读取数据。
——(1)版本控制:版本控制技术是在操作的数据表中增加一个版本号字段,习惯上将该版本号命名为version,当一个新事务到来时,首先加载版本号,如果版本号和数据库中的版本号相等,那么允许事务进行数据操作,否则给出警告信息,数据操作人员可以选择继续还是放弃当前的操作。注意:使用版本控制技术是通过程序实现在锁定机制,如果一个事务更改了版本信息,那么另一个事务必须先获得新的版本号以后才可以进行数据操作。
——(2)时间戳:使用时间戳就是在数据表中增加一个时间类型的版本号,操作数据的事务必须匹配当前的时间才可以进行数据操作。
锁的使用原则:
对于数据访问频率较低并且一旦产生冲突后果极其严重的的情况应该使用悲观锁;对于要求性能和效率的数据访问频率高,即使发生数据冲突后果也不是很严重的情况可以使用乐观锁。
相关推荐
本文将深入探讨Hibernate中的事务和并发控制,这对于开发高效、稳定的数据库应用至关重要。 首先,我们来理解Hibernate中的事务管理。在数据库操作中,事务是保证数据一致性的重要手段。一个事务包含了一组数据库...
事务和并发控制是数据库管理中的核心概念,特别是在使用ORM框架如Hibernate时,理解它们的工作原理至关重要。本文将深入探讨Hibernate中的事务管理和并发控制。 首先,事务是数据库操作的基本单位,它保证了数据的...
### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...
在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别专注于IoC(Inversion of Control,控制反转)和ORM(Object-Relational Mapping,对象关系映射)。在企业级Java应用开发中,事务处理是核心功能之一,...
一、Hibernate事务管理 在数据库操作中,事务确保了数据的一致性和完整性。Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...
#### 三、事务并发处理 Hibernate 提供了两种主要的并发控制机制: 1. **乐观锁(Optimistic Locking)**:假设数据不会经常冲突,只有在提交时才会进行冲突检测。Hibernate 通过版本字段实现自动乐观并发控制。 2....
本教程主要聚焦于Hibernate中的事务并发处理,包括悲观锁和乐观锁两种策略,这对于我们理解如何在高并发环境中确保数据的一致性和完整性至关重要。 首先,事务是数据库操作的基本单元,它确保一组操作要么全部成功...
以下是关于Hibernate事务和并发控制的详细讨论。 1. **数据库事务的定义** 数据库事务是一系列操作的逻辑单位,这些操作要么全部成功,要么全部失败。事务满足ACID属性: - **原子性**(Atomicity):事务中的...
在Java的持久化框架Hibernate中,版本管理机制是实现事务并发控制的重要手段。它通过维护对象的版本信息,确保在多线程环境下数据的一致性和完整性。本文将深入探讨Hibernate中的版本管理机制及其在控制事务并发中的...
总的来说,理解和掌握Hibernate的事务处理和并发控制是开发高效、可靠的应用程序的关键。开发者应熟悉JDBC、SQL和数据库事务隔离级别,以及如何通过合理配置和编程实践来优化并发性能,以适应不同的应用场景。
《课程hibernate的事务和并发》主要探讨了在Hibernate框架中如何管理和处理事务以及并发控制。Hibernate作为一款流行的Java ORM(对象关系映射)工具,其事务处理和并发控制策略对于开发高效、稳定的数据库应用至关...
Hibernate 对事务并发处理 在 Hibernate 中,对事务并发处理是非常重要的, especialmente 在多用户环境中。事务处理的目的是为了保证数据的可靠性和一致性。 事务四个特性 ACID 1. 原子性(Atomicity):事务...
描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及如何在不同场景下确保数据的一致性和...
这个标题指出我们要讨论的是Hibernate框架在处理查询和数据库并发事务方面的内容。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的方式操作数据库,而无需过多关注底层SQL语言。在第...
【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...
通过源码学习,开发者可以更深入地了解事务在内部如何工作,从而更好地应对并发和数据一致性问题。在实际开发中,结合使用声明式事务管理,如Spring的@Transactional注解,可以使代码更加简洁、易于维护。
总的来说,理解Hibernate的事务处理机制和`flush`方法的用法是避免异常和确保数据一致性的关键。通过谨慎地管理事务、正确使用`flush`,以及遵循并发控制的最佳实践,我们可以有效地防止和解决这类问题。在复杂的...
Hibernate事务与并发问题处理[收集].pdf