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