我有一张桌子,上面放着客户的余额。

| Customer_Id | Request_Id | Blance | Request_Date |


接收到应用程序的每个请求,我都会选择最后一个请求并读取其余额并进行一些处理,最后在表中插入具有新余额的新记录(旧余额-请求金额)。我的挑战是,在这种情况下,当一个客户收到两个请求到我的应用程序时,并发发生了,并最终插入了一个错误余额的记录。
我知道乐观锁定可以理想地帮助您更新场景,但是我们的系统是旧版应用程序,因此我无法更改系统的行为。

最佳答案

如果由于系统的遗留特性而不能使用乐观锁,则仍然可以对JPA-The actual used depends on your implementation 使用悲观锁。
或者,您可以使用NATIVE QUERY锁定要更新的行-例如,在Oracle中,您可以使用SELECT ... FOR UPDATE

SELECT ... FROM ... WHERE Customer_Id = ... FOR UPDATE

07-24 09:36