我是JPA的新手,请在下面提供一些帮助
我的实体UserTransaction位于
之下@Entity
@Table(name = "user_transaction")
public class UserTransaction{
@Basic
@Column(name = "current_balance")
private BigDecimal currentBalance;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinColumn(name = "user_id", columnDefinition = "BIGINT UNSIGNED")
private User user;
@Version
private Integer version;
@Column(nullable = false, columnDefinition = "BOOLEAN default '1'")
protected Boolean active = true;
}
这里插入新记录,其中active = 1,同时用户余额更新,并将现有记录更改为active = 0。如果我想更新我的余额,我将获取我的用户的active = 1记录并计算我的当前余额,然后更新该记录active = 0并创建一个active = 1的新记录。
在这种情况下,当多个线程尝试更改余额时,结果会创建多个active = 1记录。我正在寻找解决方案。我有建议在我的实体中添加@Version列。我添加了它。
如果我更新现有列,则@Version列值会增加,但在插入另一个版本的列时会出现错误,而其他用户的版本也是如此。
是否可以根据用户增加版本列数?另外,我建议在并发期间处理我的用户余额。