无状态 EJB 如何回滚 JPA 事务



有例如:

@Stateless
public class EntityRepositry{
@Inject
EntityManager em;
public void create(Entity e){
// op1 success
// op2 failed
}
}

由于默认情况下无状态 EJB 是事务性的,因此我将理解如果抛出系统异常(如 OptimisticLockedException(将如何回滚事务?em.getTransaction((.rollback将如何隐式调用?

提前谢谢。

EntityManager 注入了@PeristenceContext注释(或者你可能有一个 CDI 生产者?

如果持久性单元声明为 JTA 事务

<persistence-unit name="myname" transaction-type="JTA">

则 EJB 事务绑定到 JPA 事务,反之亦然。

JPA 异常回滚整个转换,但请记住,任何运行时异常都会回滚事务,检查异常不会。

因此,如果您使用 JTA 事务管理,则不必手动回滚事务,只需抛出或捕获正确的异常(捕获 RuntimeException 不会阻止事务回滚,但允许您管理它(。

最新更新