`
hpjianhua
  • 浏览: 243716 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

Hibernate事务管理与乐观悲观锁定义

阅读更多
Hibernate事务管理

数据库ACID特征:
Atomic(原子性):指整个数据库事务是不可分割的工作单元。
Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
Durability(持久性):指的是只要事务成功结束,它对数据库所作的更新就必须永久保存下来。

数据库系统支持两种事务模式:

自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。

MySQL中数据库表分为3种类型:
INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:

A.第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
B.脏读:一个事务读到另一个事务未提交的更新数据。
C.虚读:一个事务读到另一个事务已提交的新插入的数据。
D.不可重复读:一个事务读到另一个事务已提交的更新数据。
E.第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。

数据库系统提供了四种事务隔离级别供用户选择:

Serializable(串行化):
一个事务在执行过程中完全看不到其他事务对数据库所做的更新。
B.Repeatable Read(可重复读):
一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。
C.Read Commited(读已提交数据):
一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。
D.Read Uncommitted(读未提交数据):
一个事务在执行过程中可以拷打其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。

隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以有优先考虑把数据库系统的隔离级别设为Read Commited,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:

悲观锁:指在应用程序中显示的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。

B.乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。
悲观锁有两种实现方式:

A.在应用程序中显示指定采用数据库系统的独占所来锁定数据资源。SQL语句:select ... for update,在Hibernate中使用get,load时如session.get(Account.class,new Long(1),LockMode,UPGRADE)

B.在数据库表中增加一个表明记录状态的LOCK字段,当它取值为“Y”时,表示该记录已经被某个事务锁定,如果为“N”,表明该记录处于空闲状态,事务可以访问它。增加锁标记字段就可以实现。
利用Hibernate的版本控制来实现乐观锁

乐观锁是由程序提供的一种机制,这种机制既能保证多个事务并发访问数据,又能防止第二类丢失更新问题。
在应用程序中可以利用Hibernate提供的版本控制功能来视线乐观锁,OR映射文件中的<version></version>元素和<timestamp></timestamp>都具有版本控制的功能,一般推荐采用<version></version>
分享到:
评论

相关推荐

    Hibernate的乐观锁与悲观锁

    ### Hibernate的乐观锁与悲观锁 #### 一、引言 在并发环境下,尤其是在金融、电商等业务场景中,确保数据的一致性和完整性至关重要。**Hibernate**作为一种流行的Java持久层框架,提供了多种机制来处理并发控制...

    Hibernate悲观锁与乐观锁

    《Hibernate 悲观锁与乐观锁详解》 在多用户并发访问的环境中,数据库管理系统必须具备有效的数据访问控制机制,以确保数据的一致性和完整性。Hibernate,作为一款流行的Java持久化框架,提供了两种主要的锁定策略...

    Hibernate乐观锁

    Hibernate乐观锁是数据库事务控制的一种策略,主要用于处理并发更新数据的情况。在乐观锁的机制下,假设并发用户很少会发生冲突,所以...在实际应用中,可以结合悲观锁和其他并发控制策略,以达到最佳的事务处理效果。

    hibernate事务管理

    5. **乐观锁与悲观锁**: Hibernate支持这两种锁定策略。悲观锁假设并发冲突多,因此在获取数据时就立即加锁,直到事务结束才释放。乐观锁则假设冲突少,在更新数据时检查在此期间数据是否被修改过。Hibernate中,...

    Hibernate事务与并发问题处理.pdf

    【标题】:Hibernate事务与并发问题处理 【描述】:本文深入探讨了在使用Hibernate框架时,如何管理和解决事务及并发问题。主要关注点在于事务的ACID特性以及并发操作可能导致的数据不一致性。 【标签】:技术 ...

    Hibernate教程26_事务并发处理

    本教程主要聚焦于Hibernate中的事务并发处理,包括悲观锁和乐观锁两种策略,这对于我们理解如何在高并发环境中确保数据的一致性和完整性至关重要。 首先,事务是数据库操作的基本单元,它确保一组操作要么全部成功...

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    #### 二、Hibernate事务管理机制 Hibernate 本身不实现事务逻辑,而是依赖于底层的数据源(JDBC 或 JTA)来实现事务管理。这意味着,当你使用 Hibernate 进行数据操作时,所涉及的事务要么基于 JDBC 的事务管理,要么...

    hibernate 对事务并发处理

    悲观锁采用数据库内部锁机制,在一个事务操作数据时,为数据加锁,另一个事务无法操作。 例如,在 Hibernate 中使用悲观锁: ```java Customer customer = (Customer) session.load(Customer.class, 1, LockMode....

    jee事务控制.pdf

    这两种策略类似于单个事务内的乐观锁和悲观锁,但应用于不同事务之间的交互。 - **乐观离线锁**:通过版本字段或其他机制检测数据是否被其他事务修改过。 - **悲观离线锁**:在事务开始时锁定资源,直到事务结束。 ...

    hibernate pdf 电子书

    同时,Hibernate还提供了乐观锁和悲观锁等并发控制策略,以防止数据冲突。你需要理解何时使用事务开始、提交和回滚,以及如何正确地实现并发控制策略。 通过阅读《Hibernate PDF 电子书》,你将能够掌握Hibernate的...

    hibernate的事务和并发资料.pdf

    《Hibernate的事务和并发资料》深入探讨了在Java应用程序中使用Hibernate进行事务管理和并发控制的关键概念。Hibernate作为一款流行的ORM框架,它简化了与数据库的交互,但同时也需要开发者理解其背后的事务处理机制...

    Hibernate Developer Guide

    文档详细讲解了乐观锁和悲观锁的实现,包括版本号和时间戳机制。 ### 缓存 缓存是Hibernate中一个关键特性,用来减少数据库的访问频率,提高性能。文档将讨论查询缓存、查询缓存区域以及二级缓存提供者。 从上述...

    hibernate源码

    此外,Hibernate还提供了乐观锁和悲观锁策略,用于并发控制。 七、延迟加载(Lazy Loading) 延迟加载是Hibernate的一个重要特性,它只在真正需要时才加载关联对象,从而避免了大量无谓的数据获取。这种机制依赖于...

    Java And 数据库事务

    ### Java与数据库事务详解 ...最后,文章讨论了EJB事务模型中的两种事务管理方式以及乐观锁与悲观锁的区别。通过对这些知识点的学习,开发者可以更好地理解和掌握如何在Java应用程序中有效地管理和控制数据库事务。

    Hibernate项目开发宝典源码(完整版)

    8. **order**:订单系统,可能包含订单创建、支付、取消等业务逻辑,这可能会用到Hibernate的乐观锁、悲观锁机制,以及复杂的查询和更新操作。 通过对这些文件夹的分析,我们可以深入学习以下知识点: - Hibernate...

    Hibernate5 的用户手册中文版

    锁章节讲解了乐观锁和悲观锁的使用和管理,包括乐观锁的版本号和时间戳机制,悲观锁的使用以及LockMode类的介绍。 9. Fetching(抓取): 抓取章节介绍了抓取策略,包括不抓取、通过查询动态抓取以及通过配置文件...

    hibernate电子书小压缩包

    还有,乐观锁和悲观锁机制,用于并发控制,保证数据的一致性。 在实际项目中,我们还需要考虑事务管理。Hibernate支持JTA(Java Transaction API)和JPA(Java Persistence API)的事务管理方式,可以很好地与...

    Spring整合HIbernate

    7. **版本控制**:利用Hibernate的乐观锁或悲观锁机制,保证数据一致性。 通过以上步骤和实践,我们可以有效地整合Spring和Hibernate,构建出高效且易于维护的Java应用。在实际开发中,还需要根据项目需求灵活调整...

Global site tag (gtag.js) - Google Analytics