无状态EJB如何回滚JPA事务

无状态EJB如何回滚JPA事务,jpa,ejb,java-ee-7,stateless-session,Jpa,Ejb,Java Ee 7,Stateless Session,例如: @Stateless public class EntityRepositry{ @Inject EntityManager em; public void create(Entity e){ // op1 success // op2 failed } } 由于无状态EJB在默认情况下是事务性的,我可以理解如果抛出系统异常(如OptimisticLockedException),事务将如何回滚?如何隐式调用em.ge

例如:

@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异常回滚整个事务,但请记住,任何RuntimeException都会回滚事务,而checked exception则不会


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

这是否回答了您的问题?