请教Hibernate乐观锁和悲观锁相关问题
  1.这两个锁仅仅是用来解决并发的问题, 防止多人同时操作同一数据造成错误的吗?
  2.如果只是用来解决并发操作同一数据的问题, 数据库的隔离级别不就是干这个的吗, 那
    乐观锁和悲观锁还有什么意义?
  3.是不是隔离级别和锁用一种就可以了, 因为他们解决的是同一种问题
0

2个回答

隔离级别控制的是事务之间允许并发的程度(这样说可能不太准确,请google 一下read uncommit, read commited, repeatable, serialize几种隔离级别以及相应的案例就清楚了),而锁是控制数据访问的互斥约束,二者不是一回事(当然,也可以用serialize的隔离级别来实现锁的控制,只是效率会低的离谱

悲观锁:对加锁的数据禁止任何操作;
乐观锁:并不禁止这些操作,但是A加的乐观锁,被B操作了以后(写操作),A的线程会报异常(B操作了以后,版本+1,A实际上是通过版本的变动情况知道被操作的)

所以:悲观锁的实现比较简单,但是效率较低,乐观锁的实现实际上需要Catch相应的异常(并不是错误,所以需要给出合适的处理方式,比如重试等)

网上的资料很多,讲的也比较清楚,仔细看看就知道了。

0

我没用过hibernate,建议你用一下ibatis,更贴数据库一些。隔离级别是用到事务上的,可以看到spring定义了声明式事务和编程式事务,都有不一样的隔离级别。
乐观锁和悲观锁是为了数据的一致性、或者脏读什么的。我用悲观锁一般是来做行级防并发用的。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
【hibernate集锦】---悲观锁和乐观锁
why?        如下图所示,一天结束后,某商场核算员1和核算员2均要对库存中的奶粉数量重新进行统计。假设库存中原有奶 粉数量为1000,一天内核算员1和核算员2所在分区的销售量均为200,核算员1读取数据并开始计算,此时核算员2也 读取数据开始计算,核算员1统计完后提交数据,库存量变为800。但是核算员2手中持有的基数还是原有库存量 1000,这样一来就对不上账了。。。
014——hibernate的悲观锁和乐观锁
举例: 初始化类: package com.java.hibernate; import org.hibernate.Session; public class InitData { public static void main(String[] args) { Session session = null; try { session = HibernateU
Hibernate的悲观锁和乐观锁
前一篇博客我们从数据库角度分析,锁可以分为三种,分别为共享锁,独占锁和更新锁。我们从程序的角度来看锁可以分为两种类型,悲观锁和乐观锁,Hibernate提供对这两种锁 的支持,我们来了解一下Hibernate如何实现这两种锁。 一、悲观锁 Pessimistic Locking 通常由数据库机制实现,在查询的整个过程中把数据锁住,只...
hibernate悲观锁和乐观锁
如果数据库不加锁,在多个用户访问的时候,有可能会造成不可重复读的问题(如,两个用户进行更新,并且这两个用户都先后的拿到了表中的记录的数值,A用户更新比B用户先更新完,但B用户还是按照初始的值进行更新,这时候就会造成不可重复读)。此时可以通过hibernate的悲观锁机制,对hibernate的读操作进行加锁(LockMode.UPGRADE),将并行变串行,对读所操作的记录行进行加锁。通过先来先服
hibernate 乐观锁与悲观锁使用
[url]http://www.blogjava.net/baoyaer/articles/203445.html[/url] [url]http://www.cnblogs.com/otomedaybreak/archive/2012/01/27/2330008.html[/url]
hibernate中的乐观锁和悲观锁
hibernate支持两种锁:悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)悲观锁:指的是对数据库数据被外界的修改持保守态度(无论是本系统的事务处理,或者是外部系统的事务处理),在整个数据处理的过程数据都处于锁定的状态。hibernate中的悲观锁,是依靠数据库中的锁机制(因为只有数据库层才能控制本系统和外部系统对数据库的数据操作)。例如”selec
hibernate中的悲观锁和乐观锁
悲观锁 11.4. 悲观锁定(Pessimistic Locking) 用户其实并不需要花很多精力去担心锁定策略的问题。通常情况下,只要为JDBC连接指定一下隔 离级别,然后让数据库去搞定一切就够了。然而,高级用户有时候希望进行一个排它的悲观锁定, 或者在一个新的事务启动的时候,重新进行锁定。 Hibernate总是使用数据库的锁定机制,从不在内存中锁定对象! 类LockMode 定义了
【Hibernate】——悲观锁和乐观锁
观锁在遇到高并发的时候会出现延迟的现象,所以用什么锁要看具体情况而定。乐观锁就适合于高并发的情况。但它实质上是一种冲突检测。想版本控制工具CVS使用的就是乐观锁,而微软的VSS是悲观锁。
Hibernate悲观锁-乐观锁
Hibernate 乐观锁-悲观锁原理及使用
Hibernate之乐观锁和悲观锁
Hibernate之乐观锁和悲观锁 乐观锁和悲观锁用于处理数据的并发访问。Hibernate有一个特殊的属性——版本属性。版本属性不参与业务逻辑,只用来保证不会有2个线程同时对数据库进行读写。版本属性是乐观锁的一种实现。   悲观锁 嘉定其他用户企图访问或者改变正在访问、更改的对象的概率是很高的,因此在悲观锁中,在开始改变此对象前必须锁住对象,并且指导你提交了所做的操作才释放锁。   ...
Hibernate乐观锁和悲观锁详解
悲观锁: 悲观锁是对数据库而言的,数据库悲观了,他感觉每一个对他操作的程序都有可能产生并发。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。...
Hibernate悲观锁与乐观锁案例
Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。
Hibernate的乐观锁与悲观锁
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
Hibernate悲观锁与乐观锁
很好的描述Hibernate的悲观锁和乐观锁,
Hibernate的悲观锁、乐观锁
多个用户同时访问一个数据库,则当他们的事务同时使用相 同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:丢失数据 修改、读 ” 脏 ” 数据(脏读)、不可重复读、产生幽灵数据 多个用户同时访问一个数据库,当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括丢失数据、修改、脏读、不可重复读、产生幽灵数据。为了解决并发问题hibernate提出了
【Hibernate】【乐观锁,悲观锁】
事务并发的五类问题 第一类丢失更新:两个事务同时更新一个数据,A提交,B回滚,数据回滚 第二类 丢失更新:两个数据同时关系一个数据,A晚提交,B早提交,B无效 脏读:一个事务内,读取了事务B未提交的数据.(结果事务B回滚,该事务就用了脏数据) 虚读:一个事务内,前后读取不一致,(期间有人增加过数据) 不可重复读:一个事务内两次读取同一条数据,返回结果不相同.(期间有人修改过该数据) MySQL的隔离
Hibernate悲观锁 和 乐观锁
乐观锁主要是为了解决事务并发问题。 乐观锁,大多数是基于数据版本记录机制实现。数据版本:即为数据增加一个版本记录标识,在基于数据库表的解决方案中,一般是通过为数据库表增加一个version字段来实现。 原理:     度数据时,将版本号一起读出,之后更新的时候,对版本号加一。此时,将提交数据的版本和数据库表中的进行比较,如果提交的版本号大于数据库表中的版本号,则允许更新,否则认为是过期数据。
Hibernate悲观锁VS乐观锁
所谓锁,就是通过一些机制保证数据在某个操作过程中不会被外界修改,hibernate支持两种锁机制,悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)。 一、悲观锁 原理:         指对数据被外界修改持保守态度,因此在整个数据处理过程中,将数据处于锁定状态,只要事务部释放(提交/回滚),任何用户都不能查看和修改。它的实现,往往依靠数据库提供
Hibernate中的悲观锁和乐观锁
前言       我们都知道,事务具有四个特性:原子性、隔离性、一致性、持久性。对于数据库的操作也应该具有事务的性质,如果执行正确则返回结果,如果中间出了差错,应该回滚,这样才能保证数据库的数据的真实性。但是在现实操作过程中,往往数据量不是一条两条,而是很多条数据同时操作,这是就要防止并发问题。通常来说,数据库的隔离级别越大,并发性就越差。防止数据库的并发,就有了锁机制的出现。   为什么...
Hibernate中乐观锁和悲观锁。
在hibernate事务处理中造成的写问题(丢失更新的问题:更新一定是查询最新的结果),之前博客简单描述了一下解决方法,这篇博客,来详细讲解一下如何用乐观锁和悲观锁解决写问题。 下面我们通过例子来理解: 在事务操作中,最经典的就是转账案例, 如图所示: AB两个用户同时操作数据库,A用户在原余额上添加了10块钱,所以是110元,但是B用户添加了30元,却变成了140元,这就造成了并发操...
Hibernate乐观锁与悲观锁
1.悲观锁 一个事务访问某数据库中一定量的数据时,锁死这些数据,在commit()释放锁前禁止其他线程的任何操作。Hibernate总是使用数据库的锁定机制,从不在内存中锁定对象! 必然发送的sql:for update. 例如:select * from Emp for update.锁死了Emp表的数据 使用Hibernate设置数据库隔离级别以实现悲观锁: 在Hibernate的配置文件中可...
Hibernate 悲观锁和乐观锁详解
首先我们来说下锁(locking)的概念: 这个概念在我们学习多线程的时候曾经接触过,其实这里的锁和多线程里面处理并发的锁是一个道理,都是暴力的把资源归为自己所有。这里我们用到锁的目的就是通过一些机制来保证一些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改。Hibernate支持两种锁机制:即通常所说的“悲观锁(Pes...
Hibernate锁机制_悲观锁和乐观锁
Hibernate锁机制_悲观锁和乐观锁
hibernate乐观锁和悲观锁学习
... 1 . 首先为 TUser 的 class 描述符添加 optimistic-lock 属性: <hibernate-mapping> <class name="org.hibernate.sample.TUser" table="t_user" dynamic-update="true" dynamic-insert="true" optimistic-lock="version"> …… </class> </hibernate-mapping> optimistic-lock 属性有如下可选取值: none:无乐观锁 version:通过版本机制实现乐观锁 dirty:通过检查发生变动过的属性实现乐观锁 all:通过检查所有属性实现乐观锁 其中通过 version 实现的乐观锁机制是 Hibernate 官方推荐的乐观锁实现,同时也是 Hibernate 中,目前唯一在数据对象脱离 Session 发生修改的情况下依然有效的锁机制。因此,一般情况下,我们都选择 version 方式作为 Hibernate 乐观锁实现机制。 .....
hibernate的乐观锁和悲观锁
hibernate的乐观锁和悲观锁,两种锁搞定一切
【Hibernate 9】悲观锁和乐观锁
一、锁的基本简介 1.1,为什么需要锁 首先,锁的概念产生,主要是为了解决并发性的问题。什么是并发性问题呢,比如: Angel现在银行有个账号,里面有存款1000块。现在,Angel的账户,在两个地方分别执行操作。首先,Angel妈妈拿着主卡在四川给Angel账户存钱,读取出Angel的余额是1000块。其次,Angel拿着副卡在廊坊从账户里取钱,读取出angel 的余额是1000块...
hibernate——悲观锁&&乐观锁
锁,主要是解决并发性问题 悲观锁,通常是有数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交/回滚),那么任务用户都不能查看或修改。避免更新丢失,悲观锁的并发性不好。 session的load加载时加上了lockmode.upgrade public void testLoad1() { Session session = null; try {
hibernate 悲观锁与乐观锁
悲观锁 悲观锁,通常是有数据库机制实现的,在整个过程中把数据锁住(查询时),只要事务不释放(提交/回滚) 那么任何用户都不能查看或修改 乐观锁 多数的使用是采用数据版本的方式(version)实现,一般在数据库中加入一个version字段 在读取数据的时候将version读取出来,在保存数据的时候判断version的值是否小于数据库中的 version值,如果小于不予更新,否则给予...
hibernate 乐观锁&悲观锁
hibernate乐观锁 就是在数据库中增加一个字段例如version 每一次修改数据的时候,都会修改version的值,所以,同时修改数据的时候并不会成功,同时会抛出一个org.hibernate.StaleObjectStateException异常。这个时候可以捕获这个异常然后,重新修改值,就可以了。 示例:@Entity @Table(name = "t_user") public c
Hibernate乐观锁和悲观锁分析
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
数据库事务、hibernate悲观锁和乐观锁
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
Hibernate 悲观锁与乐观锁
一、悲观锁        悲观锁具有强排他性,依靠数据库的锁机制来实现的。当在某一行数据加上悲观锁后,在这一行数据的整个处理过程中,只有一个用户可以访问它,其他用户被排除在外。只有等到当前用户释放锁后,其他用户才能访问这一数据。悲观锁在并发性能上差强人意。它的加锁时间可能会很长,所以一般用在小型快速处理的事务上。      在Hibernate中,可以用如下三种方式对数据进行加锁   
Hibernate悲观锁/乐观锁
默认事务之间会产生数据冲突,所以要求事务在读取数据的时候就对数据加锁,保证数据访问的排它性; 该锁将一直被事务持有,直到事务结束才会释放锁。 一、悲观锁 最常用的,是对查询进行加锁(LockMode.UPGRADE和LockMode.UPGRADE_NOWAIT),悲观锁的可以通过以下三种方式实现: 1)调用Session.load(),并设置了LockMode 2)调用Session.
Hibernate悲观锁和乐观锁的实现
NULL 博文链接:https://12345678.iteye.com/blog/721836
Hibernate的悲观锁与乐观锁
Hibernate提供了两种锁机制,悲观锁和乐观锁。 1.悲观锁 其中悲观锁的实现依赖于数据库的锁机制,如果数据库底层没有实现相应的数据排他性,那么就无法实现悲观锁。 加锁模式有: LockMode.None 不加锁 LockMode.Write 在insert和update的时候会自动获取 / /还是不明白的因为没有用过 LockMode.Read ...
hibernate 悲观锁与乐观锁[转]
Hibernate支持两种锁机制: 即通常所说的“悲观锁(Pessimistic Locking)”和 “乐观锁(OptimisticLocking)”。 悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。 Hibernate的加锁模式有: Ø LockMode.NONE : ...
【Hibernate】Hibernate中的悲观锁和乐观锁
锁的产生? 在多个用户中,在同一个时间可能会有多个用户更新使用相同的记录,这就会产生冲突。 悲观锁,理解为一个人很悲观,每次去拿数据的时候,都认为别人会修改。为了不让别人修改,所以每次拿数据的时候,都会上锁,这样别人使用这个数据的时候都得等着。直到这个悲观的人使用完成之后,他才会解锁,别人才能够使用。 乐观锁,理解为一个人很乐观,每次去拿数据的时候,认为别人不会修改,所以不会上锁。但是在
hibernate学习13之悲观锁与乐观锁
悲观锁Pessimistic 悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据锁定,其它任何用户都不能读取或修改 一旦使用了悲观锁,load的lazy会失效 看下面的例子: import org.hibernate.LockMode; import org.hibernate.Session; import junit.framework.TestCase; public
Hibernate之事务、隔离级别、悲观锁、乐观锁
事务需要保证原子性(Atomicity)、一致性(Consistence)、隔离性(Isolation behavior)、持续性(Durability),简称ACID。 原子性:一个事务内的操作要么全部成功,要么全部失败回滚。 一致性:事务内的数据,如果事务成功,则必须都是成功后的状态,如果失败,则必须都是最开始的状态,不能有的是成功后的状态,有的是开始的状态。 隔离性:在多个事务同时...
Hibernate性能(缓存、悲观锁、乐观锁)
本文主要讲诉hibernate性能的优化以及缓存、悲观锁和乐观锁
相关热词 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘 c#读写txt文件 c#挖地雷源代码 c#弹框选项 c# 移除 队列 c# 密码写入配置文件 c# 获取可用内存大小 c# 嵌入excel编辑