Java软件开发基础知识梳理之(8)------Hibernate并发控制

一、悲观锁(Pessimistic Lock)
悲观锁是Hibernate基于数据库的机制来实现的,根据是否设定了查询条件可以锁定指定的记录或锁定整个表
1 可选的锁定模式有如下几种:
LockOptions.NO_WAIT:
LockOptions.NONE:
LockOptions.READ:
LockOptions.UPGRADE:会在生成的sql语句最后加上"for update"
LockOptions.WAIT_FOREVER:
2 用于设定LockMode的接口
query.setLockMode(String alias, LockMode lockMode)
query.setLockOptions(LockOptions lockOptions)
session.get(....)
session.load(....)
session.resh(....)
criteria.setLockMode(LockMode lockMode)
二、乐观锁
hibernate基于数据版本(Version)记录机制实现,为数据增加一个版本标识,严格来讲,乐观锁是一种冲突检测机制
1 实体映射时采用@Version字段标识版本号,可以是整型也可以是Timestamp,如下所示
@javax.persistence.Entity
@Table(name = "t_concurrency_user")
public class User {
 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;
 @Column
 private String name;
 @Column
 private String sex;
 @Version
 private int version;
 ....
2 提交更新时,如果版本号大于数据表当前版本号,刚更新成功,否则认为是脏数据,抛出org.hibernate.StaleObjectStateException异常
三、乐观锁机制由Hibernate提供保证,悲观锁则是借助于数据库层提供的锁机制来实现

四、实例代码

1 悲观锁实体类

package com.justin.hibernate.model.currencycontrol;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 * 
 * Author: Justin Hu
 * Create Date: Apr 16, 2014
 * Description: 
 *
 */
@javax.persistence.Entity
@Table(name = "t_concurrency_user")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer id;
	@Column
	private String name;
	@Column
	private String sex;
	@Version
	private int versi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值