`
Jason__Chen
  • 浏览: 14866 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

hibernate中事务并发处理机制

    博客分类:
  • JAVA
阅读更多
1,事物并发时可能出现的问题:





2.数据库有自身的事务隔离机制:有4种分别是
          Read-uncommited在没提交之前也可以去读,但仍会出现dirty read,non-repeatable read,phantom read。
          Read-commited提交之后才可以去读,但仍会出现non-repeatable read,phantom read。
          Repeatable read当某条记录正在被使用时,会将它锁住,其它线程必须等它commit之后才可使用,可以有效避免各类事务并发问题。
          Serializable按顺序挨个执行,可以有效避免各类事务并发问题,但严重影响效率。

          Mysql默认的是repeatable read(查询方式select @@tx_isolation),如果想使效率提高可以使用read-commited,然后用hibernate去解决non-repeatable read等问题。
          Hibernate提供了悲观锁和乐观锁来防止事务并发导致的错误
               悲观锁:使用方式是在load(xx.class,i,LockMode.Upgrade)
                    a) LockMode.None表示无锁的机制,Transaction结束时,切换到此模式
                    b) LockMode.read在查询的时候hibernate会自动获取锁
                    c) LockMode.wrie在insert update时hibernate会自动获取锁
                    这三种锁都是由hibernate自行完成的,我们只需要写LockMode.Upgrade表示支持hibernate锁的方式即可。
               乐观锁:在表中增加一个字段,如果是使用annotation方式则在该字段的getter方法上加@version,如果是使用xml则加入<version name="version"></version>当出现事务并发错误时系统会提示错误,如
                      org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [domain.Account#1]
分享到:
评论
7 楼 fangtianying 2010-12-06  
楼主对sql 92事物隔离级别认识有错误:

引用
Repeatable read当某条记录正在被使用时,会将它锁住,其它线程必须等它commit之后才可使用,可以有效避免各类事务并发问题。
Serializable按顺序挨个执行,可以有效避免各类事务并发问题,但严重影响效率。


1. repeatable read 仍可能造成phantom read;另外不要按自己的理解‘当某条记录正在被使用时,会将它锁住’,不同数据库事务隔离实现方式不一样,‘锁’的概念不能乱用。
2. serializable并不意味着按顺序挨个执行! 即使使用serializable,数据库事物仍可能是并发的。
6 楼 lifangling_2010 2010-12-05  
呵呵 这不是孙卫琴的书上的吗?
5 楼 ray_linn 2010-11-02  
哪家的银行是这么设计的哈,就拿第一个案例来说lost update来说

一定是分为3个事务:存款1000,汇款100,取款100,每个事务都是记在借贷双方的,连传票都是起3份的。
4 楼 yin_bp 2010-11-02  
flashing 写道
yin_bp 写道
请问这个和select 。。。for update no wait有啥区别呢,我决的完全通过hibernate框架无法阻止出现由于并发事务时导致的一系列问题,应该是程序结合for update no wait组合来处理并发事务问题,个人愚见。

version的乐观锁和LockMode的悲观锁都可以处理并发的。
只是select for update不是什么db都支持的



如果同时有多个应用在进行并行(并发)操作时,hibernate又如何解决事务一致性问题呢?
3 楼 flashing 2010-10-30  
yin_bp 写道
请问这个和select 。。。for update no wait有啥区别呢,我决的完全通过hibernate框架无法阻止出现由于并发事务时导致的一系列问题,应该是程序结合for update no wait组合来处理并发事务问题,个人愚见。

version的乐观锁和LockMode的悲观锁都可以处理并发的。
只是select for update不是什么db都支持的
2 楼 yin_bp 2010-10-25  
请问这个和select 。。。for update no wait有啥区别呢,我决的完全通过hibernate框架无法阻止出现由于并发事务时导致的一系列问题,应该是程序结合for update no wait组合来处理并发事务问题,个人愚见。
1 楼 angeltping 2010-10-25  
好贴,讲得很好了,对于高并发的大型系统的,定单处理很重要

相关推荐

    hibernate 对事务并发处理

    在 Hibernate 中,对事务并发处理是非常重要的, especialmente 在多用户环境中。事务处理的目的是为了保证数据的可靠性和一致性。 事务四个特性 ACID 1. 原子性(Atomicity):事务作为一个整体,所有操作要么...

    详解Hibernate事务处理机制

    ### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...

    Hibernate教程26_事务并发处理

    理解并熟练运用Hibernate的事务并发处理机制,可以帮助我们设计出更高效、更可靠的数据库访问层。在实际项目中,需要根据业务需求和并发量来灵活选择悲观锁或乐观锁,或者结合两者以达到最佳效果。同时,还要注意...

    Hibernate中,利用版本管理机制来控制事务并发

    在Java的持久化框架Hibernate中,版本管理机制是实现事务并发控制的重要手段。它通过维护对象的版本信息,确保在多线程环境下数据的一致性和完整性。本文将深入探讨Hibernate中的版本管理机制及其在控制事务并发中的...

    Hibernate事务和并发控制

    事务和并发控制是数据库管理中的核心概念,特别是在使用ORM框架如Hibernate时,理解它们的工作原理至关重要。本文将深入探讨Hibernate中的事务管理和并发控制。 首先,事务是数据库操作的基本单位,它保证了数据的...

    Hibernate的事务处理机制和flush方法的用法.docx

    在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些场景下会出现特定的异常。 首先,我们需要了解Hibernate中的事务处理。在Java应用中,事务通常与SessionFactory和Session...

    hibernate事务管理机制.doc

    【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...

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

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

    day36 09-Hibernate中的事务:事务处理

    在IT行业中,数据库操作是应用程序的核心部分,而事务处理是确保数据一致性、完整性和可靠性的关键机制。在Java领域,Hibernate作为一款强大的对象关系映射(ORM)框架,提供了便捷的方式来处理数据库事务。本篇文章...

    hibernate的事务核并发

    描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及如何在不同场景下确保数据的一致性和...

    hibernate的事务和并发资料.pdf

    Hibernate作为一款流行的ORM框架,它简化了与数据库的交互,但同时也需要开发者理解其背后的事务处理机制。 首先,Hibernate支持两种类型的事务管理:JDBC连接管理和JTA(Java Transaction API)资源管理。它并未...

    Hibernate part 14:查询及数据库并发事务

    9. **实体状态与生命周期**:理解Hibernate中的临时态、持久态、瞬时态和脱管态对于正确处理并发事务至关重要。 10. **最佳实践**:包括合理设计实体关系、避免N+1查询、使用批处理等,都是提升并发性能的关键。 ...

    课程hibernate的事务和并发.pdf

    《课程hibernate的事务和并发》主要探讨了在Hibernate框架中如何管理和处理事务以及并发控制。Hibernate作为一款流行的Java ORM(对象关系映射)工具,其事务处理和并发控制策略对于开发高效、稳定的数据库应用至关...

    day36 11-Hibernate中的事务:当前线程中的session

    本文将深入探讨Hibernate中的事务处理,特别是“当前线程中的Session”这一概念,以及如何在实际开发中有效地利用它。 在Hibernate中,Session是与持久化层交互的主要接口,它负责对象的持久化、检索、更新和删除等...

    Hibernate事务处理

    ### Hibernate事务处理详解 #### 一、事务处理概念与特性 事务处理是数据库操作中一个核心的概念,尤其在处理复杂的业务逻辑时,确保数据的一致性和完整性至关重要。Hibernate作为Java领域中广泛使用的对象关系...

    day36 10-Hibernate中的事务:解决丢失更新

    在数据库管理中,事务是确保数据一致性的重要机制,而丢失更新是并发控制中可能出现的一种错误情况。 在数据库系统中,丢失更新是指两个或多个事务对同一数据进行修改,导致最终结果丢失了其中一个事务的更新。例如...

    spring hibernate mysql 事务实例

    在IT行业中,数据库事务是确保数据一致性的重要机制,特别是在分布式系统和多层架构中,如Spring、Hibernate和MySQL的组合。本实例将深入探讨如何在这样的环境中实现事务管理。 Spring框架以其强大的依赖注入和AOP...

    Hibernate的事务管理.doc

    4. Hibernate事务配置与API 在Hibernate配置文件中,可以指定默认的事务隔离级别,例如: ``` &lt;property name="hibernate.connection.isolation"&gt;2&lt;/property&gt; &lt;!-- 读已提交 --&gt; ``` Hibernate API提供了`...

Global site tag (gtag.js) - Google Analytics