首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA @版本和事务回滚

JPA @版本和事务回滚
EN

Stack Overflow用户
提问于 2015-03-27 20:22:44
回答 1查看 555关注 0票数 0

我有一个名为user的实体,它是版本控制的:

代码语言:javascript
复制
@Entity
public class User{
...
@Version
private Long version;

还有一个叫取款,那就不是了。

在@Singleton类中的周期性@Transactional方法中,我尝试根据用户执行的提款来更新用户:

代码语言:javascript
复制
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);
}

如果我在用户被读取之后,但在他被合并之前更改了他的版本,我会得到一个异常:

代码语言:javascript
复制
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction

对用户的更改被恢复,但对撤销的更改没有恢复,这是一个问题。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 20:29:31

可能有许多可能的原因。您的数据库是事务性的吗?您是否在数据库和应用程序中都启用了事务?您如何获取您的取款对象?它们是托管实体吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29300577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档