我有一个想使写操作无效的场景。简要介绍以下场景:
有两个进程在完全不同的系统中运行,我们有一个公共数据库。让这个过程称为“P1”和“P2”。每个进程都可以执行读(R)和写(W)操作。R1和W1显示由P1和R2执行的操作,W2显示由P2执行的操作。让我们取一个公共的DB对象(O)。
现在操作按以下顺序执行:
R1(按进程“P1”读取“O”)
R2(按进程“P2”读取“O”)
W1(由进程“P1”写入“O”)—>这使P2的“O”变脏。
现在我想让P2在执行W2操作时失败,因为它包含旧的不一致对象。
我读过一些关于在持久化之前检查时间戳的博客,但这不是解决方案(因为即使是毫秒问题,它也容易出错)。
我想知道企业级的解决方案。
另外,我想知道如何使用第三方解决方案,如hibernate,可以实现它。

最佳答案

你需要optimistic locking。在hibernate中,您可以为每个实体提供一个单独的注释为@version的数值字段的乐观锁。每次插入或更新操作都会将此字段值增加一个,并避免将过时的数据(具有较低版本值)获取持久化到数据库。

10-07 12:37
查看更多