并发乐观锁问题请教

08-11-28 power1128

在BS架构下,比如说同一个申请,有两个人审批。两个人(A和B)同时(或者是差不多时间)打开了该申请的审批界面。A此时正在网页上浏览该申请的内容,B则看的比较快,并且B认为没有问题,此时B点下了“同意”按钮。然后如果A再点击“同意”按钮或者其他审批按钮,系统应该提示A该申请已经被审批。

那此时大家是怎么完成这种校验的呢?我能想到的就是在页面上除了保存申请的ID外,还要保存申请的VERSION(或者其他的乐观锁控制字段),在第二次请求服务器的时候,比较服务器的VERSION和页面保存的VERSION是否一致。大家是这么做的吗?

[该贴被power1128于2008-11-28 14:38修改过]

xmuzyu
2008-11-28 17:59

如果用ORM框架,比如hibernate就支持离线乐观锁,只要reattach原来的对象后,会自动进行版本检测。,如果不用hibernate等ORM框架,那么就可以采用将version保存到session中。

power1128
2008-12-01 13:20

-->只要reattach原来的对象后

请问reattach的时候不是从数据库重新select一遍生成对象吗?这里是否要用到二级缓存。hibernate的缓存不是session结束就关闭了吗?请指教