15
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- 是否需要为
version
创建setter/getter? - 当用Hibernate持久化这个实体时,我不需要手动设置这个值,对吗?
- 为了在Spring的
hibernateTemplate.saveOrUpdate
中使用乐观并发检查,还需要配置什么?是否支持所有数据库? - 如何对此实体进行单元测试?在我的数据库中,显示版本字段的所有记录的值均为0
- 每次都会调用
hibernateTemplate.saveOrUpdate
是否增加版本值?
@KLE只是为了防止2个用户调用hibernatetemplate.saveorupdate同一时间,当调用hibernatetemplate.saveorupdate时不需要额外的检查吗?任何异常都会抛出? – cometta 2009-12-03 09:51:05
@cometta重点不在于保存与否,而在于数据来自何处。在一个事务中,**如果你从数据库**读取一个实体,它的版本信息是最新的。当您保存它时,它会自动处理。如果您有一天会从其他来源获取数据(例如表单的帖子),然后重新创建该实体,那么您必须亲自关注该版本。 – KLE 2009-12-03 10:01:10
一个很好的解释是在这里:http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas 2014-01-29 12:44:58