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>配置中配置

  • 相关阅读:
    ThinkPHP讲解(一)框架基础
    smarty简单介绍
    留言板
    文件系统处理
    文件上传(带有预览模式)
    文件上传(无预览模式版)
    注册、登陆、审核练习
    session讲解(二)——商城购物车练习
    session讲解(一)——登录网页练习
    P6216 回文匹配
  • 原文地址:https://www.cnblogs.com/huigee/p/9758294.html
Copyright © 2011-2022 走看看