首页 > 解决方案 > 重试 JPA 事务

问题描述

有没有办法重试在 JPA 中因回滚异常而失败的事务?据我所知,如果事务失败,所有托管实体都会分离。

基本上我想要的是:我加载一个实体,用户对该实体进行更改,然后保持更改。

如果用户进行了有效的更改,一切正常。但是如果用户出错并且事务失败,他们当前必须丢弃所有工作,重新加载实体,重做工作(没有错误)并重试事务。

我尝试使用新的 EntityManager 来保持基本上像这样:

    tmpEm = createEntityManager();
    final EntityObject find = tmpEm.findById(EntityObject.class, toPersistEntity.getId());
    if (find != null) {
      tmpEm.beginTransaction();
      tmpEm.merge(toPersistEntity);
      tmpEm.commitTransaction();
    } else {
      tmpEm.beginTransaction();
      tmpEm.persist(find);
      tmpEm.commitTransaction();
    }

但这并不总是有效,因为 EntityObject 包含一个 OneToMany 集合,我不知道是否添加了或添加了哪些实体(我可以找到它,但这需要我可以坚持的每个实体的实体特定代码)。

有没有更好的办法?我可以以某种方式返回到 EntityManager 在开始交易之前的状态吗?

标签: jpa

解决方案


推荐阅读