共享数据的一致性,使陈旧数据对象的写入无效

时间:2015-01-20 07:04:09

标签: mysql hibernate jpa ejb

我有一个场景,我想让写操作无效。简要介绍下面的情景:

有两个进程在完全不同的系统中运行,我们有一个共同的数据库。让这个过程被称为' P1'和' P2'。每个进程都可以执行read(R)和write(W)操作。 R1和W1表示由P1和R2完成的操作,W2由P2完成。让我们采用一个通用的DB对象(O)。

现在操作按以下顺序执行:

R1(阅读' O'按流程' P1')
R2(阅读' O'按流程' P2')
W1(写' O'按流程' P1') - > 这使得' O' P2脏了
现在我想要的是在执行W2操作时失败P2,因为它包含旧的不一致对象。

我已经阅读了几篇关于在持久化之前检查时间戳的博客,但这不是解决方案(因为它很容易出错,即使它是毫秒级问题)。
我想知道企业级解决方案。
此外,我想知道如何通过使用像hibernate这样的第三方解决方案来实现。

1 个答案:

答案 0 :(得分:1)

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