我有多个彼此相关的表,如果在一步操作的persist()中发生错误,我想回滚所有记录。
我已经阅读了一些关于JTA的问题是应用程序控制和一些UserTranscation的例子。
我是JPA的新人,我只知道我必须做什么。
我需要将一些信息添加到Table1的记录并获取此recordId并将其用于Table2,其中包含一些信息和INSERT.If错误发生时将记录添加到第二个表我想回滚整个操作。但是,它会抛出异常在em.getTransaction().begin();
,它说Exception Description: Cannot use an EntityTransaction while using JTA.
我应该使用UserTranscation还是我该怎么办这个类型的多个persist()?
@Dependent
@Transactional
public class UserService extends AbstractService<UserDO> {
@PersistenceContext(unitName = "UserProjectPU")
private EntityManager em;
@Inject
private UserFooService userFooService;
public UserService() {
super(UserDO.class);
}
@Override
protected EntityManager getEntityManager() {
return em;
}
public long addUser(UserDO user, String userAnotherInfo) {
try {
em.getTransaction().begin();
UserDO usr = user;
em.persist(user);
em.flush();
long addedUserId = usr.getId();
UserFooDO userFoo= new UserFooDO();
userFoo.setContent(userAnotherInfo);
userFoo.setUserId(addedUserId);
userFooService.create(userFoo);
em.getTransaction().commit();
return addedUserId;
} catch (Exception ex) {
em.getTransaction().rollback();
throw new RuntimeException(ex);
}
}