有没有办法在 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 的状态吗?