该在什么时候使用乐观锁(Version)?

06-07-06 yh
现在我们做的这套OA系统采用Hibernate的Version来控制并发,我不太明白的是在什么情况下要进行Version控制?

是不是只要有并发修改/删除的时候都要控制呢?比如帐户有可能被多个人操作,而帐户又比较敏感,当然应该做控制。不过,像消息通知这种东西,虽然有可能并发操作,但有必要控制吗?

有没有什么样的原则可遵循?

主子表是否要在子表也做乐观锁控制?

。。。。

比如Jdon论坛程序中对帖子要做并发控制吗(如果超级管理员和发表人都有权力修改或删除帖子的话)?

望各位指教。。。

    

banq
2006-07-06 16:26
以购物来说,用户确认订单 到 信用卡支付 等,是和这个用户相关的一系列逻辑过程,确认订单时需要操作数据库,信用卡也需要操作数据库,但是,在订单确认和信用卡支付之间,该用户可能操作比较慢,等一段时间才完成,那么是不是在这个阶段,为保持事务,数据库连接一直打开呢?

Hibernate的Session会在等待用户交互时,Session断开数据库连接。在整个应用事务过程中,Hibernate使用单例Session和单例类来实现。

为防止在等用户交互时,数据库数据被其他用户如管理员修改过,出现stale,数据不一致,所以,在写入时会重新读取数据库。

一般用户通过JDBC事务可以完成大部分事务,但是对于特殊应用,程序员如果对事务水平很高,可以主动干预事务粒度,这样就是悲观事务,意思大概是属于很小心,对事情都谨慎,从坏处悲观想,意思表示要求苛刻。

猜你喜欢