首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate 乐观锁 org.hibernate.StaleObjectStateException 错误(转)

2012-10-24 
Hibernate 乐观锁 org.hibernate.StaleObjectStateException 异常(转)转自:http://lijiejava.iteye.com/bl

Hibernate 乐观锁 org.hibernate.StaleObjectStateException 异常(转)

转自:http://lijiejava.iteye.com/blog/726787

?

Hibernate乐观锁大多是基于数据版本(version)记录机制实现的。所谓的数据版本,就是为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个version字段来实现。
????????
????????? 读取数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本信息进行对比,如果提交的数据版本号大于数据库表中的当前版本号,则予以更新,否则认为是过期数据。
????????
???????? 乐观锁 测试:

??????? User 类:



???????? 测试代码:

Hibernate: select user0_.id as id0_0_, user0_.version as version0_0_, user0_.name as name0_0_ from t_user user0_ where user0_.id=?Hibernate: update t_user set version=?, name=? where id=? and version=?Hibernate: select user0_.id as id0_0_, user0_.version as version0_0_, user0_.name as name0_0_ from t_user user0_ where user0_.id=?Hibernate: update t_user set version=?, name=? where id=? and version=?



即每次都是查询更新,因为load时采用延迟加载,得到的只是一个代理对象,当对user进行设置时,会发出sql语句查询,紧接着就是更新语句。所以两次select查询得到的version值不同,不会冲突。

热点排行