Hibernate中的Entity类的乐观锁配置
2016-05-26 15:05
323 查看
Hibernate中对Entity对象的修改,最终往往是要持久化到存储中的,那么Hibernate如何保证存储的有效性呢?
首先,持久化Entity对象的修改仅限于对存储的UPDATE和DELETE操作,对于INSERT和SELECT无需考虑这个问题。
这里介绍Hibernate中乐观锁的使用。
1. 在Hibernate对JPA的实现中,其乐观锁就是在进行UPDATE和DELETE操作时检查Entity类中专门的版本属性。
Entity类中的版本属性使用@javax.persistence.Version标注定义。
Entity类中,可用作版本属性的有2种类型:
1)数字类型
int/Integer
short/Short
long/Long
2)Date类型
java.sql.Timestamp
@javax.persistence.Entity
public class Thing {
@javax.persistence.Id
private Integer id;
@javax.persistence.Version
private Timestamp ts;
...
}
2. 在Hibernate的Hibernate Native API实现中,乐观锁检查Entity类中的所有属性或所有会发生变化的属性
这种实现机制主要是为了集成遗留系统(遗留系统中往往没有专门的版本属性)。
使用@org.hibernate.annotations.OptimisticLocking(type=org.hibernate.annotations.OptimisticLockType.VERSION)定义Entity类。
其中,@org.hibernate.annotations.OptimisticLockType可能的值有4种:
VERSION,检查@javax.persistence.Version指定的属性(默认值)
NONE,禁用任何版本检查(即使指定了@javax.persistence.Version属性)
ALL,检查所有属性
DIRTY,只检查变化了的属性
@javax.persistence.Entity
@OptimisticLocking (type = OptimisticLockType.ALL)
public class EmployeeEntity implements Serializable
{
public EmployeeEntity(){
}
//Other code
}
首先,持久化Entity对象的修改仅限于对存储的UPDATE和DELETE操作,对于INSERT和SELECT无需考虑这个问题。
这里介绍Hibernate中乐观锁的使用。
1. 在Hibernate对JPA的实现中,其乐观锁就是在进行UPDATE和DELETE操作时检查Entity类中专门的版本属性。
Entity类中的版本属性使用@javax.persistence.Version标注定义。
Entity类中,可用作版本属性的有2种类型:
1)数字类型
int/Integer
short/Short
long/Long
2)Date类型
java.sql.Timestamp
@javax.persistence.Entity
public class Thing {
@javax.persistence.Id
private Integer id;
@javax.persistence.Version
private Timestamp ts;
...
}
2. 在Hibernate的Hibernate Native API实现中,乐观锁检查Entity类中的所有属性或所有会发生变化的属性
这种实现机制主要是为了集成遗留系统(遗留系统中往往没有专门的版本属性)。
使用@org.hibernate.annotations.OptimisticLocking(type=org.hibernate.annotations.OptimisticLockType.VERSION)定义Entity类。
其中,@org.hibernate.annotations.OptimisticLockType可能的值有4种:
VERSION,检查@javax.persistence.Version指定的属性(默认值)
NONE,禁用任何版本检查(即使指定了@javax.persistence.Version属性)
ALL,检查所有属性
DIRTY,只检查变化了的属性
@javax.persistence.Entity
@OptimisticLocking (type = OptimisticLockType.ALL)
public class EmployeeEntity implements Serializable
{
public EmployeeEntity(){
}
//Other code
}
相关文章推荐
- centos 手动安装网卡驱动
- C# Entity Framework中的IQueryable和IQueryProvider详解
- 使用Entity Framework(4.3.1版本)遇到的问题整理
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- Display SQL Server Version Information
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 关于Unsupported major.minor version 49.0的错误解决办法
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计