`

hibernate 事务 并发

阅读更多
数据库事务与并发
概述:事务通过隔离级别控制锁的形式来处理数据的并发问题。

为什么事务能够处理并发问题?
答:事务的特性决定它能够处理并发问题:一致性、隔离性、持久性、原子性

数据的并发有哪些情况?
答:
一、后发生的事务影响前面的事务
1、第一类更新丢失:后发生的事务回滚覆盖了前面提交成功的事务
2、脏读:后发生的事务成功提交覆盖了前面的回滚的事务
3、第二类更新丢失:后发生的事务成功提交覆盖了前面的成功提交的事务
二、后发生的事务受到前面的事务的影响
1、虚读:后一个事务在前后两次读取数据时由于前面的已提交的事务进行了插入操作,
         而使数据统计前后不一致。
2、不可重复读:后一个事务在对同一条数据前后两次读取时由于前面的已提交的事务
               进行了对这条数据更新操作,而使数据前后不一致。

事务如何处理并发问题?
答:
事务通过锁来处理并发问题一般有两种方式:
悲观锁:通过数据库系统的锁来处理并发
乐观锁:通过应用程序逻辑处理并发

悲观锁的种类有哪些?
答:
一、共享锁:用于读数据操作。
特性:
1、加锁条件:当一个事务执行select语句时数据库系统会为这个事务分配一把共享锁,来锁定被查询的记录。
2、解锁条件:读取完毕则释放共享锁。
3、兼容性:如果数据资源上已经放了共享锁还可放共享锁和更新锁。
4、并发性能:具有良好的并发性能。
二、更新锁:在更新操作的初始化阶段用来锁定可能要被修改的资源,避免使用共享锁造成的死锁问题。
特性:
1、加锁条件:当一个事务执行update语句时,数据库系统会先为事务分配一个更新锁。
2、解锁条件:当读取数据完毕,进行更新操作时将更新锁升级为独占锁。
3、兼容性:与共享锁兼容。一个数据资源上可以有多个共享锁和一个更新锁。
4、允许多个事务同时读锁定的资源,但不允许其它事务修改它。
三、独占锁:修改数据时使用独占锁。
特性:
1、加锁条件:当执行update、delete、insert操作时数据库系统会为数据资源使用独占锁。如果该资源上已经有其它锁         
            存在时则无法放置独占锁
2、解锁条件:独占锁一直到事务结束才能被解除。
3、兼容性:独占锁不能和其它锁兼容。
4、并发性:并发性能较差。

事务如何控制锁的形式?
答:事务通过事务的隔离级别来控制锁的形式。
事务级别有哪些?并发情况怎样?
答:
隔离级别
是否出现第一类丢失更新
是否出现脏读
是否出现虚读
是否出现不可重复读
是否出现第二类丢失更新
Serializable
Repeatable Read
Read Commited
Read Uncommited

 


在应用程序中如何使用乐观锁:
 答:一般在数据库表中增加Version或者是TimeStamp字段,根据读取时以及在进行修改操作时Version或者TimeStamp的值不同来控制并发问题。

Hibernate是如何处理并发问题的:
答:
一、 Hibernate在读取数据时通过设置锁定模式来控制悲观锁的形式

锁定模式
描述
LockMode.NONE
如果在Hibernate的缓存中存在指定对象,就直接返回该对象的引用;否则就通过Select语句到数据库中加载该对象。这是默认值
LockMode.Read
不管Hibernate的缓存中是否存在指定对象,总是通过select语句到数据库中加载该对象;如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的指定对象是否和数据库中的版本一致。
LockMode.UPGRADE
不管Hibernate的缓存中是否存在指定对象,总是通过select语句到数据库中加载该对象;如果映射文件中设 置了版本元素,就执行版本检查,比较缓存中的指定对象是否和数据库中的版本一致。如果数据库系统支持悲观锁就执行select。。。for update语句,如果数据库系统不支持悲观锁,就执行普通的select语句。
LockMode.UPGRADE_NOWAIT
和LockMode.UPGRADE具有同样的功能。此外对于Oracle数据库,执行select。。for update nowait语句。
LockMode.WRITE
当Hibernate向数据库保存或者更新一个对象时,会自动使用此模式。这种模式仅供Hibernate内部使用。
 
二、 Hibernate在映射文件中使用乐观锁处理并发问题

 


1、<version>元素:此元素指定的字段,每进行一次操作就自动加1,在进行读取和修改操作时如果version值不相同则抛出异常,交给应用程序处理。
<id name="id" type="long" column="ID">
    <generator class="increment"/>
</id>
<version name="version" column="VERSION"/>
 <version>必须紧跟在<id>后面

2、<timestamp>元素:此元素指定的字段数据,每进行一次操作就更新成当前时间。由于当前时间精确到妙所以在处理并发问题的精确性上没有<version>好。
注意:这两个元素在使用时都要紧跟在<id>元素后面。
<id name="id" type="long" column="ID">
    <generator class="increment"/>
</id>
<timestamp name="lastUpdatedTime" column="LAST_UPDATED_TIME"/>
  <timestamp>必须紧跟在<id>后面

3、对于现有的数据库表不包含version或者timestamp字段,要处理并发问题可以在<class>元素上进行如下设置:
   次方法必须在同一个session下面才有效,所以用处不大!
<class name=”Account” table=”Accounts” optimistic-lock=”all” dynamic-update=”true”>
 
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate 事务和并发控制

    本文将深入探讨Hibernate中的事务和并发控制,这对于开发高效、稳定的数据库应用至关重要。 首先,我们来理解Hibernate中的事务管理。在数据库操作中,事务是保证数据一致性的重要手段。一个事务包含了一组数据库...

    Hibernate事务和并发控制

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

    hibernate事务,并发及缓存管理实例

    一、Hibernate事务管理 在数据库操作中,事务确保了数据的一致性和完整性。Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...

    hibernate 对事务并发处理

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

    Spring Hibernate 事务处理 详细说明

    3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...

    详解Hibernate事务处理机制

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

    hibernate事务管理机制.doc

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

    Hibernate事务(源码)

    **Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...

    Hibernate教程26_事务并发处理

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

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

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

    Hibernate事务与并发问题处理[收集].pdf

    Hibernate事务与并发问题处理[收集].pdf

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

    **标题解析:**“Hibernate part 14:查询及数据库并发事务” 这个标题指出我们要讨论的是Hibernate框架在处理查询和数据库并发事务方面的内容。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者...

    hibernate的事务核并发

    ### Hibernate事务管理 #### 非托管环境下的事务处理 在非托管环境中,如独立的Java应用程序或Web应用中,Hibernate通过其内部的连接池机制管理数据库连接。为了执行事务操作,开发者需要遵循以下步骤: 1. **...

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

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

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    hibernate的事务和并发资料.pdf

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

    课程hibernate的事务和并发.pdf

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

Global site tag (gtag.js) - Google Analytics