zoukankan      html  css  js  c++  java
  • 怎么实现hibernate悲观锁和乐观锁?

    隔离级别的安全控制是整体一个大的方面,而锁机制更加的灵活,它执行的粒度可以很小,可以在一个事务中存在。

    Hibernate悲观锁是依靠底层数据库的锁机制实现,在查询query.setLockMode(),

    hibernate的加锁模式有:

    LockMode.NONE :无锁机制。

    LockMode.WRITE :Hibernate在 Insert和 Update记录的时候会自动获取。

    LockMode.READ :Hibernate在读取记录的时候会自动获取。

    以上这三种锁机制一般由 Hibernate内部使用,如Hibernate为了保证 Update过程中对象不会被外界修改,会在 save 方法实现中自动为目标对象加上 WRITE锁。

    LockMode.UPGRADE :利用数据库的 for update 子句加锁。

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

    加锁方法实现:

    Criteria.setLockMode

    Query.setLockMode

    Session.lock

    悲观锁会带大量的性能开销。乐观锁是Hibernate在内存实现的,提供了3种实现:

    1.基于version:读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一

    2.基于timestamp:

    乐观锁只须在<hibernate-mapping>配置中配置

  • 相关阅读:
    UML中对关系的描述 (二)
    MDA(模型驱动架构)
    简单工厂模式
    Windows Communication Foundation(WCF) 一步一步从入门到精通
    UML 状态图
    C# 设计模式与重构
    DSM领域定义建模和MDA模型驱动架构分析
    UML 部署图
    UML 活动图
    UML 及其作用
  • 原文地址:https://www.cnblogs.com/huigee/p/9758294.html
Copyright © 2011-2022 走看看