重试JPA交易

时间:2018-12-12 08:40:17

标签: 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开始交易之前的状态吗?

0 个答案:

没有答案