您的位置:首页 > 其它

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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息