Hibernate 乐观锁 org.hibernate.StaleObjectStateException 异常(转)
转自:http://lijiejava.iteye.com/blog/726787
?
Hibernate乐观锁大多是基于数据版本(version)记录机制实现的。所谓的数据版本,就是为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个version字段来实现。
????????
????????? 读取数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本信息进行对比,如果提交的数据版本号大于数据库表中的当前版本号,则予以更新,否则认为是过期数据。
????????
???????? 乐观锁 测试:
??????? User 类:
???????? 测试代码:
即每次都是查询更新,因为load时采用延迟加载,得到的只是一个代理对象,当对user进行设置时,会发出sql语句查询,紧接着就是更新语句。所以两次select查询得到的version值不同,不会冲突。