假如系统中有一个Account的实体类,我们在Account中多加一个version字段,那么我们JDBC Sql语句将如下写: Select a.version....from Account as a where (where condition..) Update Account set version = version+1.....(another field) where version =?...(another contidition)
这样以来我们就可以通过更新结果的行数来进行判断,如果更新结果的行数为0,那么说明实体从加载以来已经被其它事务更改了,所以就抛出自定义的乐观锁定异常(或者也可以采用spring封装的异常体系)。具体实例如下: ....... int rowsUpdated = statement.executeUpdate(sql); If(rowsUpdated= =0){ throws new OptimisticLockingFailureException(); } ........
Hibernate中使用乐观锁:如果我们采用hibernate做为持久层的框架,那么实现乐观锁将变得非常容易,因为框架会帮我们生成相应的sql语句,不仅减少了开发人员的负担,而且不容易出错。下面同样采用version字段的方式来总结一下: 同样假如系统中有一个Account的实体类,我们在Account中多加一个version字段, public class Account{ Long id ; ....... @Version //也可以采用XML文件进行配置 Int version .......