如何处理多个事务,这些事务创建依赖于先前记录状态的行?

时间:2019-06-11 19:41:13

标签: hibernate jpa dropwizard

因此,我有一个Rest端点在数据库中创建记录,我使用的是工作单位模式。

在创建此记录之前,代码将在创建新记录之前检查数据库中是否有任何“活动”记录,并将其设置为“非活动”(这只是一列)。

用于创建此记录的代码在应用程序内部使用,也可以使用端点从外部服务访问。

问题是我在数据库中不断收到状态为“ active”的1条以上的记录。

似乎有时有多个事务命中此代码(可能是从应用程序内部调用,而另一个是通过端点从外部服务调用),并且其中一个事务检查要设置的数据库中的“活动”记录它们为“非活动”状态,其他事务仍未提交,因此我最终得到2个活动记录。

悲观锁的使用对我有帮助吗?

1 个答案:

答案 0 :(得分:0)

可以肯定,悲观锁会有所帮助!

如果您执行select for update,则其他事务将无法读取此记录。

但是您必须要小心,因为某些RDBMS不执行行锁定,而是执行页面锁定之类的操作,并且它可能会锁定一行以上。

因此交易应尽可能短。