乐观锁

Jul 10, 2017 10:38:44 AM

作者:ecoolper

乐观锁

在多用户环境中,在同一时间可能会有多个用户更新相同的记录,会产生冲突,解决方案有两种:乐观锁、悲观锁。悲观锁在这里不讲,自行Google。乐观锁假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性,不完整则更新失败。

乐观锁实现方式

  • 使用整数表示数据版本号.更新时检查版本号是否一致,如果相等,则更新成功,且版本号+1.如果不等,则数据已经被修改过,更新失败。
  • 使用时间戳来实现。 本质上也是版本号,只是版本号是时间戳,并发就死.

Nutz实现方式

  • version字段必须是数字类型(int、long、short),不符合则抛出异常
  • 一个表中最多只能有一个version=true的字段,否则抛出异常
  • version字段不能为空,为空则不能正确更新数据,但不报错和抛出异常
  • 只支持实体类形式的更新,包括实体类集合
  • 乐观锁更新方法 dao.updateWithVersion
  • 调用dao.updateWithVersion后,version字段值自动加1
  • 设置为version字段后,dao.insert默认赋值0

代码片段

  1. public class Pet {
  2. @Name
  3. private String name;
  4. @Column
  5. private int age;
  6. @Column(value="version")
  7. private int version;
  8. }
  9. // 执行更新
  10. dao.updateWithVersion(pet);
  11. // 实际执行的SQL
  12. update table set age=?,version=version+1 where name=? and version=?

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议GNU自由文档许可证下修改和再使用。

原文: http://nutzam.com/core/dao/update_with_version.html