乐观锁
Apr 16, 2017 6:18:59 PM
作者: ecoolper

乐观锁

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

乐观锁实现方式

1、使用整数表示数据版本号。更新时检查版本号是否一致,如果相等,则可以更新,同时version+1,如果不等则 数据已经被修改过,返回更新未成功信息。 2、使用时间戳来实现。 注:Hibernate使用方式1,通过@Version注解,生成类似sql:

    update table set id=?,a=?,b=?,c=?,version=version+1 where id=? and version=?

Nutz实现方式

nutz使用方式1,通过版本实现乐观锁。 1、version字段必须是数字类型(int、long、short),不符合则抛出异常 2、一个表中最多只能有一个version字段,不符合则抛出异常 3、version字段值不能为空,为空则不能正确更新数据,但不报错和抛出异常 4、可以不设置version字段,不设置则表示不启用乐观锁更新 4、只支持实体类形式的更新,包括实体类list 5、生成的sql语句格式: update table set id=?,name=?,version=version+1 where id=? and version=? 6、乐观锁更新方法 dao.updateWithVersion 7、调用dao.updateWithVersion后,version字段值自动加1 8、设置为version字段后,dao.insert默认赋值0

代码片段

        @Name
        @Column("id")
        private String id;
        @Column(value="version")
        private int version;
Top ↑