【发布时间】:2014-12-08 22:27:16
【问题描述】:
假设我有一个 DAO 定义如下:
@Local(MyEntityDAO.class)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
@Stateless
public class MyEntityDAO {
public MyEntity create(MyEntity entity) {
entityManager.persist(entity);
return entity;
}
// Etc. [...]
}
所有方法都会抛出 JPA 标准异常。 现在,我想设置数据事务,以便在运行时发生回滚时管理回滚。
我发现的第一种方法是将UserTransaction 与 DAO 实例一起注入,如下所示:
@ManagedBean
class myBean() {
@Inject myEntityDAO myEntityDAO;
@Resource UserTransaction userTransaction;
void doSomething() {
try {
// userTransaction.begin();
MyEntity myEntity = new MyEntity("sample-data");
myEntityDAO.create(myEntity);
userTransaction.commit();
} catch (Exception ex) {
userTransaction.rollback();
throw ex;
}
}
}
- 上面的解决方案对吗?
- 是否可以仅通过注释 EJB 并使用上述 JPA 标准异常来自动管理事务?
【问题讨论】:
标签: java hibernate jakarta-ee jpa ejb