`
topquan
  • 浏览: 29954 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate事务处理和锁

阅读更多
事务处理:
Hibernate本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务的管理与调度。

基于JDBC的事务:
无疑是最简单的实现方式,
session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
tx.commit();

基于JTA的事务管理:
hibernate默认采用JDBC Transacion。可以通过配置文件指定采用JTA作为事务管理实现。
<hibernate-configuration>
    <session-factory>
        ......
        <property name="hibernate.transaction.factory_class">
  org.hibernate.transaction.JTATransactionFactory
        </property>
    </session-factory>
</hibernate-configuration>

锁(locking)
支持两种锁:悲观锁和乐观锁

悲观锁(Pessimistic locking):
数据库的实现
select * from account where name='yyy' for update
通过for update子句,这条语句锁定所有符合条件的记录,在本次事务提交之前,外界无法修改这些记录。

hibernate的实现,也是基于数据库的锁机制实现:
加锁一般通过以下方法实现:
Criteria.setLockMode
Query.setLockMode
Session.lock

hibernate的加锁模式:
LockMode.NONE:无锁机制
LockMode.WRITE:hibernate在Insert和update时,会自动获取
LockMode.READ:hibernate在读取记录的时候,会自动获取
以上3种,由hibernate内部使用。

LockMode.UPGRADE:利用数据库的for update子句加锁
LockMode.UPGRADE_NOWAIT:oracle特定实现,利用oracle的for update nowait子句实现加锁。

乐观锁(Optimistic locking):
hibernate在其数据访问引擎中内置了乐观锁实现。可以通过class描述符的optimistic-lock属性结合version描述符指定。

<hibernate-mapping>
    <class
        name="org.hibernate.sample.TUser"
        table="t_user"
        dynamic-update="true"
        dynamic-insert="true"
        optimistic-lock="version"
    >
     <id>......
     </id>
      <version
         column="version"
         name="version"
         type="java.lang.Integer"
      />
    </class>
</hibernate-mapping>
注意,version节点要在ID节点之后。
这里,声明了一个version属性,用于存放用户的版本信息,保存在T_User表的version字段中。



topquan 2006-08-05 01:18 发表评论
分享到:
评论

相关推荐

    Hibernate乐观锁和悲观锁分析

    这种锁机制依赖于数据库的事务隔离级别和锁机制来实现。在Hibernate中,悲观锁可以通过`Query.setLockMode()`或`Criteria.setLockMode()`方法设置锁模式。例如: ```java String hqlStr = "from TUser as user ...

    Hibernate悲观锁和乐观锁的实现

    在进行Hibernate的测试时,可以创建一个名为`hibernate_test`的项目,编写对应的实体类、映射文件以及测试用例,模拟并发场景,来深入理解并对比悲观锁和乐观锁的差异和效果。 总之,理解并合理运用悲观锁和乐观锁...

    hibernate乐观锁和悲观锁学习

    本文主要讨论的是Hibernate框架中两种锁机制的使用:乐观锁和悲观锁。 首先,让我们深入理解悲观锁(Pessimistic Locking)。悲观锁正如其名字所示,假设并发环境中数据会被频繁修改,所以在整个数据处理过程中,它...

    数据库事务、hibernate悲观锁和乐观锁

    在处理并发问题时,Hibernate提供了悲观锁和乐观锁两种机制。 悲观锁假设并发环境中的冲突是常态,因此在读取数据时就立即锁定,直到事务结束才释放。在Hibernate中,可以通过设置`@LockModeType.PESSIMISTIC_READ`...

    hibernate的乐观锁和悲观锁

    ### Hibernate的乐观锁和悲观锁 #### 一、引言 在软件开发中,尤其是在涉及大量并发操作的应用场景下,确保数据的一致性和完整性是非常重要的。对于基于Java Web的应用而言,Hibernate作为一款流行的ORM框架,提供...

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

    Hibernate通过悲观锁和乐观锁来处理并发。悲观锁假设并发会导致数据冲突,因此在读取数据时就立即加锁,防止其他用户修改。乐观锁则在更新数据时检查是否被其他事务修改,通常通过版本号或时间戳实现。Hibernate还...

    Hibernate事务和并发控制

    在数据库层面,常见的并发控制机制包括锁和乐观锁。Hibernate提供了多种并发策略,如版本字段(version)和时间戳(timestamp),以实现乐观锁。在更新数据时,Hibernate会检查版本号或时间戳,如果发现有其他事务在...

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

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

    hibernate 对事务并发处理

    事务处理的目的是为了保证数据的可靠性和一致性。 事务四个特性 ACID 1. 原子性(Atomicity):事务作为一个整体,所有操作要么全部成功,要么全部失败。 2. 一致性(Consistency):事务在执行前和执行后,数据库...

    Hibernate的乐观锁与悲观锁

    **Hibernate**作为一种流行的Java持久层框架,提供了多种机制来处理并发控制问题,其中最常用的就是**乐观锁**和**悲观锁**。本文将详细介绍这两种锁的原理、应用场景以及如何在Hibernate中实现。 #### 二、悲观锁...

    Hibernate教程26_事务并发处理

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

    Hibernate锁机制_悲观锁和乐观锁

    Hibernate 锁机制_悲观锁和乐观锁 Hibernate 锁机制是指在数据库访问中,为了维护数据的一致性和正确性,所采取的一些机制来防止数据的并发访问和修改。 Hibernate 中有两种锁机制:悲观锁和乐观锁。 一、悲观锁...

    Hibernate 乐观和悲观锁

    3. **源码分析**:理解Hibernate的乐观锁和悲观锁机制,需要深入源码。在Hibernate的`Session`接口中,有相应的`lock()`和`update()`方法,它们在背后实现了锁的逻辑。通过对这些方法的调用和跟踪,可以了解其内部...

    JDBC和hibernate事务的详解

    **JDBC与Hibernate事务详解** 在Java开发中,数据库事务管理是确保数据一致性、完整性和原子性的重要机制。本讲解将深入探讨JDBC(Java Database Connectivity)和Hibernate两种不同的技术在处理事务时的方法和特点...

    Hibernate悲观锁与乐观锁案例

    总的来说,Hibernate的悲观锁和乐观锁是处理并发问题的重要工具,开发者需要根据实际情况权衡性能和数据一致性,合理选择并使用合适的锁策略。在实际项目中,还可以结合使用其他的并发控制手段,如事务隔离级别、...

    hibernate的事务和并发资料.pdf

    总的来说,理解和掌握Hibernate的事务处理和并发控制是开发高效、可靠的应用程序的关键。开发者应熟悉JDBC、SQL和数据库事务隔离级别,以及如何通过合理配置和编程实践来优化并发性能,以适应不同的应用场景。

    Hibernate乐观锁

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

    Hibernate性能(缓存 延迟加载 事务 悲观 乐观锁).ppt

    Hibernate事务处理** 在数据库操作中,事务管理是保证数据一致性和完整性的基础。Hibernate支持JTA(Java Transaction API)和JDBC事务管理。通过`session.beginTransaction()`开启事务,`transaction.commit()`...

Global site tag (gtag.js) - Google Analytics