繁体   English   中英

JPA:如何正确更新用户的存款?

[英]JPA : How to update users' deposit correctly?

我们的User类定义如下:

public User{
    // 账户余额 (Account Balance)
    @Column(nullable = false)
    public BigDecimal deposit = new BigDecimal(0);
}

现在我们需要在不同的交易中更新用户的存款,但这是我们遇到的问题。 例如 :

  1. 事务A从数据库读取的deposit = 1000
  2. 事务B从数据库读取了deposit = 1000
  3. 交易B从用户的deposit提取200,并将deposit修改为800。
  4. 交易A从用户的deposit取出500,并将deposit修改为500。
  5. 事务B回写800。
  6. 事务A回写500。

在这种情况下,我们的用户实际需要支付700的deposit而只剩下300。 但最后一笔交易会将其覆盖为错误的数字。

我们该如何纠正呢?

我的第一个想法是添加一个@Transient字段来表示我们从数据库读取的数据,当我们需要更新User ,数据库中的deposit应与我们之前分配的@transient字段相同。 但是如何将@transient映射到现有的数据库列(这意味着当我们加载User@transient字段应自动填充)?

您遇到了一个众所周知的问题。

解决此问题的最简单方法是使用某种锁定,或者是数据库上的悲观锁定,或者是应用程序中的乐观锁定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM