hibernate3学习笔记(二十三)|进阶特性(一)

1.悲观锁定:

在多个客户端可能读取同一笔数据或同时更新一笔数据的情况下,必须要有访问控制的手段,防止同一个数据被修改而造成混乱,最简单的手段就是对资料进行锁定,在自己进行资料读取或更新等动作时,锁定其他客户端不能对同一笔资料进行任何的动作。

悲观锁定(Pessimistic Locking)一如其名称所示,悲观的认定每次资料存取时,其它的客户端也会存取同一笔资料,因此对该笔资料进行锁定,直到自己操作完成後解除锁定。

悲观锁定通常透过系统或资料库本身的功能来实现,依赖系统或资料库本身提供的锁定机制,Hibernate即是如此,可以利用Query或Criteria的setLockMode()方法来设定要锁定的表或列(Row)及其锁定模式,可设定的锁定模式有以下的几个:

LockMode.UPGRADE:利用资料库的for update子句进行锁定。

LockMode.UPGRADE_NOWAIT:使用for update nowait子句进行锁定,在Oracle资料库中使用。

一个设定锁定的例子如下:

Session session = sessionFactory.openSession();
Query query = session.createQuery("from User user");
query.setLockMode("user", LockMode.UPGRADE);
List users = query.list();

...

session.close();这个程式片段会使用以下的SQL进行查询:

Hibernate: select user0_.id as id, user0_.name as name0_, user0_.age as age0_

from user user0_ for update也可以在使用Session的load()或是lock()时指定锁定模式以进行锁定。

另外还有三种加锁模式Hibernate内部自动对资料进行锁定,与资料库无关:

LockMode.WRITE:在insert或update时进行锁定,Hibernate会在save()方法时自动获得锁定。

LockMode.READ:在读取记录时Hibernate会自动获得锁定。

LockMode.NONE:没有锁定。

如果资料库不支援所指定的锁定模式,Hibernate会选择一个合适的锁定替换,而不是丢出一个例外。

时间: 2024-10-26 08:09:43

hibernate3学习笔记(二十三)|进阶特性(一)的相关文章

hibernate3学习笔记(二十三)|进阶特性(三)

6.从数据表生成映射文件 可以从资料库的表格自动生成映射文件,首先 下载 Middlegen-Hibernate,下载後将之解压缩. 这边所使用的资料库是MySQL,并假设您的资料库中已有以下的表格: CREATE TABLE user ( id INT(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(100) NOT NULL default '', age INT ); 进入Middlegen-Hibernate解压缩後的confi

hibernate3学习笔记(二十三)|进阶特性(二)

4.Interceptor 介面: 您可以在开启Session时载入一个自订Interceptor,这个Interceptor会在对应的动作发生之前呼叫对应的方法,方法是让您定义的Interceptor实作Interceptor介面,介面的定义如下: Interceptor.java package org.hibernate; import java.io.Serializable; import java.util.Iterator; import org.hibernate.type.Ty

hibernate3学习笔记(二十二)|Query缓存机制

接前面的例子:http://blog.csdn.net/kunshan_shenbin/archive/2008/09/03/2874375.aspx 测试代码如下: 1.package com.hb3.pack_22;2.3.import java.io.IOException;4.import java.sql.SQLException;5.import java.util.List;6. 7.import org.hibernate.Query;8.import org.hibernate

hibernate3学习笔记(二十一)|二级缓存

二级缓存及外部缓存,它能够越过数个Session,通过同一个SessionFactory进行管理和维护. 接上例的代码:http://blog.csdn.net/kunshan_shenbin/archive/2008/09/03/2874375.aspx 要使用二级缓存,首先需要对hibernate.cfg.xml文件进行修改: 1.<?xml version="1.0" encoding="utf-8"?>2.<!DOCTYPE hiberna

hibernate3学习笔记(二十)|关系映射:多对多

要实现多对多的对应,一般可以借由一个中间表来完成.也就是借由一对多,多对一来完成. DDL: 1.CREATE TABLE user (2. id INT(11) NOT NULL auto_increment PRIMARY KEY,3. name VARCHAR(100) NOT NULL default ''4.);5. 6.CREATE TABLE user_server (7. user_id INT(11),8. server_id INT(11)9.);10. 11.CREATE

hibernate3学习笔记(二) 一级缓存

接上例:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/201101/23637.htm 修改BusinessService.java文件如下所示: 1.package com.hb3.pack_01;2.3.import org.hibernate.Session;4.import org.hibernate.SessionFactory;5.import org.hibernate.cfg.Configuration

kvm虚拟化学习笔记(二)之linux kvm虚拟机安装

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1289627 KVM虚拟化学习笔记系列文章列表 ---------------------------------------- kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linuxkvm虚拟机安装htt

VSTO 学习笔记(十三)谈谈VSTO项目的部署

原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中,将会有很好的基础. 但是由于客户安装的Office版本不一,所以VSTO项目的部署问题显得尤为重要,需要考虑很多问题. 测试代码下载 本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1

C#学习笔记(二)

笔记 C#学习笔记(二) write by cash(天下第七)2002.01.20版权所有,翻录不究cashcao@msn.com 选择 我身上携带着精神.信仰.灵魂 思想.欲望.怪癖.邪念.狐臭它们寄生于我身体的家 我必须平等对待我的每一位客人-----------伊沙:<原则> 我的名字是cash,所以我很功利主义:我的星像是Leo,所以我很大男人主义:我的语言是C#,所以我有点儿拿不定主义. /* 你能看得出来,这不是一篇正规的技术文章,所以若你不小心从里边读到了一个爱情故事,可不要奇