Hibernate学习:悲观锁

一:测试程序

二:代码分析

(1)debug方法testPessimisticLock,

Account a = (Account) session.load(Account.class, 1,LockMode.UPGRADE);

session.getTransaction().commit();

        在session提交的这一行,加上断点。

(2)执行方法testOperate

会发现,改方法并没有成功修改数据

(3)将testPessimisticLock断点走完

(4)testOperate才会成功执行。

三:知识点

LockMode.UPGRADE通常我们就同这个参数,加悲观锁

Account a = (Account) session.load(Account.class, 1,LockMode.UPGRADE);

查看执行的sql语句,就会发现sql语句后面出现了for update

select

account0_.id as id0_0_,

account0_.balance as balance0_0_

from

Account account0_

where

account0_.id=? for update

时间: 2024-11-09 04:49:42

Hibernate学习:悲观锁的相关文章

hibernate 乐观锁与悲观锁使用

Hibernate支持两种锁机制: 即通常所说的"悲观锁(Pessimistic Locking)"和 "乐观锁(OptimisticLocking)". 悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据). Hibernate的加锁模式有: ? LockMode.NONE : 无锁机制. ? LockMode.WRITE :Hibernate在Ins

Hibernate事务与并发问题处理(乐观锁与悲观锁)

目录 一.数据库事务的定义 二.数据库事务并发可能带来的问题 三.数据库事务隔离级别 四.使用Hibernate设置数据库隔离级别 五.使用悲观锁解决事务并发问题 六.使用乐观锁解决事务并发问题 一.数据库事务的定义 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作.事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠

SQL-乐观锁,悲观锁之于并发

SQL-乐观锁,悲观锁之于并发 每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不爱说话,默默承受着编程的巨大压力,除了技术上的交流外,他们不愿意也不擅长和别人交流,更不乐意任何人走进他们的内心! 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神

悲观锁、乐观锁

悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作. 乐观锁:假设并发不会发生冲突,只在提交操作时检查是否违反数据完整性.乐观锁不能解决脏读的问题. hibernate对于乐观锁的实现:在会产生冲突的字段加上annotation @version,hibernate在更新时自动检查该字段 hibernate对于悲观锁的实现:查询的时候加上updlock选项,但是会严重影响性能,对于其它更新用户会产生阻塞. 结论:对于并发不大且不允许脏读的应用,可以使用悲观锁,对于并发量非常大的应用可以

Hibernate中的锁机制

锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进行任何操作. Hibernate是一个持久层框架,他的操作就是用来存取数据库中的数据,为了保证数据的一致性,hibernate提供了自己的锁机制. Hibernate的锁机制: 乐观锁:<pessimistic locking>他认为一般不会出现多个用户同时操作同一条数据的情况,因此不做资料库层次

乐观锁与悲观锁的应用场景

锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化.此时,我们就需要通过一些机 制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的 " 锁 " ,即给我们选定的目标数据上锁,使其无法被其他程序修改. Hibernate 支持两种锁机制:即通常所说的 " 悲

web开发中的两把锁之数据库锁:(高并发--乐观锁、悲观锁)

这篇文章讲了 1.同步异步概念(消去很多疑惑),同步就是一件事一件事的做:sychronized就是保证线程一个一个的执行. 2.我们需要明白,锁机制有两个层面,一种是代码层次上的,如Java中的同步锁,典型的就是同步关键字synchronized ( 线    程级别的).另一个就是数据库层次上的,比较典型的就是悲观锁和乐观锁. 3.常见并发同步案例分析   附原文链接 http://www.cnblogs.com/xiohao/p/4385508.html 对于我们开发的网站,如果网站的访问

Java中乐观锁与悲观锁的实现

锁(locking) 业务逻辑的实现过程中,往往需要保证数据访问的排他性.如在金融系统的日终结算 处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化.此时,我们就需要通过一些机 制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改. Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic Lockin

MySQL数据库同步之悲观锁和乐观锁

测试需要:本地开两个测试窗口 悲观锁 悲观锁它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据). 一个典型的倚赖数据库的悲观锁调用: select * from table where name='who am i' for update;这条 sql

多线程之 悲观锁,乐观锁

1.悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态.悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系 统不会修改数据). 数据库锁机制: 1        未提交读(read uncommitted) 2        提交读(read committed) 3        重复读(r