- 浏览: 82353 次
- 性别:
- 来自: 上海
文章分类
最新评论
悲观锁
悲观锁的实现,通常依赖于数据库机制,在整个过程中将数据锁定,其它任何用户都不能读取或修改!
public void testLoad1() { Session session = null; try { session = HibernateUtils.getSession(); session.beginTransaction(); // LockMode设置锁类型,不支持lazy。 Inventory inv = (Inventory)session.load(Inventory.class, 1, LockMode.UPGRADE); System.out.println("itemName=" + inv.getItemName()); System.out.println("quantity=" + inv.getQuantity()); inv.setQuantity(inv.getQuantity() - 200); session.update(inv); session.getTransaction().commit(); }catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); }finally { HibernateUtils.closeSession(session); } }
---------------------------------------------------------------------------------------------
乐观锁
大多数基于数据版本记录机制(version)实现,一般是在数据库表中加入一个version字段
读取数据时将版本号一同读出,之后更新数据时版本号加一,如果提交数据时版本号小于或等于数据表中
的版本号,则认为数据是过期的,否则给予更新
hibernate自动控制version。
<class name="com.bjsxt.hibernate.Inventory" table="t_inventory" optimistic-lock="version"> <id name="itemNo"> <generator class="native"/> </id> <version name="version"/> <property name="itemName"/> <property name="quantity"/> </class>
public class Inventory { private int itemNo; private String itemName; private int quantity; private int version; public int getItemNo() { return itemNo; } public void setItemNo(int itemNo) { this.itemNo = itemNo; } public String getItemName() { return itemName; } public void setItemName(String itemName) { this.itemName = itemName; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } }
发表评论
-
Fetch抓取策略
2008-12-21 15:30 10251 hibernate抓取策略(单端代理的批量抓取) 保持默 ... -
查询缓存
2008-12-21 13:27 2498查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存i ... -
二级缓存
2008-12-21 09:55 802二级缓存也称进程级的缓存或SessionFactory级的缓存 ... -
一级缓存
2008-12-20 21:18 825一级缓存很短和session的生命周期一致,一级缓存也叫ses ... -
HQL 原生SQL查询 外置命名查询 查询过滤器 DML风格的查询
2008-12-20 15:04 1269在hql中关键字不区分大小写,但是属性和类名区分大小写 1、简 ... -
冬夜读书示子律
2008-12-19 16:11 779古人学问无遗力,少壮功夫老始成。 纸上得来终觉浅,绝知此事要躬 ... -
Set Map Arrary List 集合映射
2008-12-19 14:50 829<class name="com.bjsxt. ... -
composite 映射
2008-12-19 10:48 748通常将复合主键相关的属性,单独放到一个类中 * 此类必须实现序 ... -
Component 映射
2008-12-19 09:54 657在hibernate中,component是某个实体的逻辑组成 ... -
继承映射
2008-12-18 21:05 832继承映射分为三种: 1 单表继承:每颗类继承树使用一个表(ta ... -
LAZY策略
2008-12-18 14:26 719hibernate lazy策略可以使用在: * <cl ... -
Many-to-Many
2008-12-18 10:36 761hibernate多对多关联映射(单向User----> ... -
one-to-many
2008-12-17 20:19 1036hihernate一对多关联映射 ... -
session --------- flush() 和 evict()
2008-12-17 14:00 2249session flush方法主要做了 ... -
数据库隔离级别
2008-12-17 13:57 793隔离级别 脏读 不可重复读 幻读 R ... -
One-to-one( 2 唯一外键关联)
2008-12-17 11:12 892hibernate一对一唯一外键关联映射(单向关联Person ... -
one-to-one(1主键关联)
2008-12-16 20:23 1744主键关联-----单向 <class name=&qu ... -
many-to-one
2008-12-16 20:15 731<class name="com.bjsx ... -
Hibernate3包问题org/slf4j/impl/StaticLoggerBinder
2008-12-15 13:55 4240Exception in thread "main& ...
相关推荐
Hibernate高级特性,悲观锁与乐观锁的应用和区别,及两者之间的区别。
很好的描述Hibernate的悲观锁和乐观锁,
本文实例讲述了mysql 悲观锁与乐观锁。分享给大家供大家参考,具体如下: 悲观锁与乐观锁是人们定义出来的概念,你可以理解为一种思想,是处理并发资源的常用手段。 不要把他们与mysql中提供的锁机制(表锁,行锁,...
在关系型数据库中,悲观锁与乐观锁是解决资源并发场景的解决方案,接下来将详细讲解:magnifying_glass_tilted_right:一下这两个并发解决方案的实际使用及优缺点。 首先定义一下数据库,做一个最简单的库存表,如下...
介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别
主要介绍了thinkPHP框架乐观锁和悲观锁,结合实例形式分析了框架乐观锁和悲观锁的原理及thinkPHP相关实现技巧,需要的朋友可以参考下
Java 中的悲观锁和乐观锁的实现 纯开发技巧。
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
并发控制—悲观锁和乐观锁
面试必备之乐观锁与悲观锁.pdf
[数据库事务与锁]详解七 深入理解乐观锁与悲观锁
详细介绍了Oracle中乐观锁、悲观锁的原理及应用,并有实例
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部 系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状 态。悲观锁的实现,往往依靠数据库提供的锁机制...
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
NULL 博文链接:https://12345678.iteye.com/blog/721836
所谓悲观锁,总是假设最坏的情况,每次去拿数据的时候都会认为别人会修改数据,造成幻读,不可重复读,脏读等情况发生。所谓乐观锁,重视假设最好的情况,每次去拿数据都认为别人不会修改,所以不会上锁,但是会在...
Hibernate锁机制_悲观锁和乐观锁