我有一个名为user的实体,版本化了:
@Entity
public class User{
...
@Version
private Long version;
和另一个名为Withdrawal,不是。
在@Singleton类的定期@Transactional方法中,我尝试根据用户执行的提款更新用户:
for(Withdrawal withdrawal : withdrawals ) {
User user= entityManager.find(User.class, withdrawal.getUser().getId());
user.setFunds(user.getFunds() - withdrawal .getFunds());
entityManager.merge(user);
withdrawal.setStatus(Withdrawal.Status.OK);
entityManager.merge(withdrawal);
}
如果我在阅读后更改了用户的版本,但在合并之前,我会得到一个例外:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction
用户的更改将被还原,但撤消的更改不会,这是一个问题。我做错了什么?
答案 0 :(得分:0)
可能有很多可能的原因。 您的数据库是否是事务性的,您是否在数据库和应用程序中都启用了事务? 你如何获得提款对象?他们是管理实体吗?