有些业务逻辑在执行过程中要求对数据进行排他性的访问,于是需要通过一些机制保证在此过程中数据被锁住不会被外界修改,这就是所谓的锁机制。
Hibernate支持悲观锁和乐观锁两种锁机制。悲观锁,顾名思义悲观的认为在数据处理过程中极有可能存在修改数据的并发事务(包括本系统的其他事务或来自外部系统的事务),于是将处理的数据设置为锁定状态。悲观锁必须依赖数据库本身的锁机制才能真正保证数据访问的排他性,关于数据库的锁机制和事务隔离级别在《Java面试题大全(上)》中已经讨论过了。乐观锁,顾名思义,对并发事务持乐观态度(认为对数据的并发操作不会经常性的发生),通过更加宽松的锁机制来解决由于悲观锁排他性的数据访问对系统性能造成的严重影响。最常见的乐观锁是通过数据版本标识来实现的,读取数据时获得数据的版本号,更新数据时将此版本号加1,然后和数据库表对应记录的当前版本号进行比较,如果提交的数据版本号大于数据库中此记录的当前版本号则更新数据,否则认为是过期数据无法更新。Hibernate中通过Session的get()和load()方法从数据库中加载对象时可以通过参数指定使用悲观锁;而乐观锁可以通过给实体类加整型的版本字段再通过XML或@Version注解进行配置。

锁机制有什么用?简述Hibernate的悲观锁和乐观锁机制相关推荐

  1. java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表

    1.请说明一下EJB的几种类型分别是什么? EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean).实体Bean(Entity ...

  2. (13) 悲观锁和乐观锁解决hibernate并发(转)

    前言:  做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统.假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为 Select ...

  3. hibernate悲观锁,乐观锁

    业务逻辑的实现过程中,往往需要保证数据访问的排他性.因此,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的"锁",即给我们选定的 ...

  4. 数据库工作笔记017---还记得Oracle悲观锁和乐观锁嘛?以及hibernate对乐观悲观锁的封装

    技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 今天又用到这个了,之前做分布式,很多表在设计的时候都不加各种限制以及关联了,因为加了以后,数据库以后维护,成本很大 但是 ...

  5. mysql的锁机制(读锁,写锁,表锁,行锁,悲观锁,乐观锁,间隙锁)

    读锁和写锁 介绍 MyISAM表锁中的读锁和写锁 读锁(共享锁S): 对同一个数据,多个读操作可以同时进行,互不干扰.加锁的会话只能对此表进行读操作,其他会话也只能进行读操作.MyISAM的读默认是加 ...

  6. Hibernate乐观锁和悲观锁详解

    悲观锁: 悲观锁是对数据库而言的,数据库悲观了,他感觉每一个对他操作的程序都有可能产生并发.它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据 ...

  7. Java并发编程(05):悲观锁和乐观锁机制

    本文源码:GitHub·点这里 || GitEE·点这里 一.资源和加锁 1.场景描述 多线程并发访问同一个资源问题,假如线程A获取变量之后修改变量值,线程C在此时也获取变量值并且修改,两个线程同时并 ...

  8. 乐观锁 -业务判断 解决高并发问题

    在解决高并发问题时,如果是分布式系统显然我们只能够使用数据库端加锁机制来解决这个问题,但是这种同步机制或者数据库物理锁机制会牺牲一部分的性能,所以常常以另外一种方式来解决这个问题 就是乐观锁模式 银行 ...

  9. 彻底理解乐观锁和悲观锁的区别

    目录 乐观锁 乐观并发控制的阶段 使用版本号实现乐观锁 优点与不足 悲观锁 使用 优点与不足 总结 乐观锁(2) 悲观锁(2) 共享锁 排它锁 行锁 表锁 乐观锁 在关系数据库管理系统里,乐观并发控制 ...

最新文章

  1. 澎思科技马原:AI安防竞争还未结束,落地进入后发优势时代 | MEET2020
  2. 计算机中文无敌版,奥特曼格斗进化3中文无敌版电脑版
  3. java文件不能生成class,一文说清!
  4. 操作系统(五)CPU调度
  5. 使用Python批量处理行、列和单元格
  6. 标准气压高度与修正海平面气压的区别
  7. 【Uva 11604 编码都有歧义了】
  8. 为什么我特别讨厌语音输入
  9. centos-7版本 安装向日葵远程
  10. 真核有参转录组测序标准分析-2
  11. python发邮件被认定为垃圾邮件_使用Python登陆QQ邮箱发送垃圾邮件 简单实现
  12. 简洁的桌面整理工具(Coodesker)
  13. matlab怎样灰度变换,matlab灰度变换函数
  14. 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28
  15. 全面解析ThreadLocal
  16. Nachos之系统调用
  17. Onedrive如何同步文件夹
  18. 反光衣穿戴识别检测系统 OpenCV
  19. matlab 多项式拟合EXCEL中复杂数据
  20. 阿里云RPA操作——当前窗口截图

热门文章

  1. java 泛型示例_Java泛型示例教程–泛型方法,类,接口
  2. python属性_Python属性()
  3. C++基本语法简介,C++程序简介
  4. 基于OpenCV的计算机视觉入门(1)图片操作入门
  5. Angular CLI 常用命令
  6. HTML 5.2 有哪些新内容?
  7. JVM性能调优监控工具专题一:JVM自带性能调优工具(jps,jstack,jmap,jhat,jstat,hprof)...
  8. java界面编程(9) ------ 列表框
  9. 《R语言数据挖掘:实用项目解析》——2.6 变量分段
  10. libgdx 3D CameraInputController WASD控制器