我对 JavaEE/JPA 还很陌生,我在我的项目中遇到了以下需求,我已经搜索了一段时间如何实现的需求,但到目前为止还没有成功,所以我希望你们中的任何人都可以指出我的错误,希望也能告诉我正确的解决方案是如何工作的,让我学习而不是仅仅复制一段工作代码。
问题:
在我的 Bean 中,我有一个调用 3 个不同 JPA 持久方法(1 个持久方法和 2 个合并方法)的方法,但我必须确保,如果这些持久方法中的一个或多个失败,我可以回滚整个事务,以避免进一步问题。
这是我的 bean 的外观:
@Stateless(mappedName = "FuncionarioBean")
@Remote(FuncionarioBeanRemote.class)
@TransactionManagement(TransactionManagementType.BEAN)//Was instructed to put this annotation, but I don't know the real impact of it in my application if it was set as a CONTAINER.
public class FuncionarioBean implements FuncionarioBeanRemote {
@PersistenceContext
private EntityManager em;
@Resource
private UserTransaction utx;
@Override
public void updateFuncionario(FuncionarioEntity funcionarioEditado) {
try{
utx.begin();
/* irrelevant code */
callJPAMergeMethod1();
/* irrelevant code */
callJPAMergeMethod2();
/* irrelevant code */
callJPACreateMethod1();
/* irrelevant code */
utx.commit();
} catch (Exception e) {
utx.rollback();
}
}
}
我正在将要更新/合并的元素之一设置为 null(column is NOT NULL) 以确保会有异常,但由于某些未知原因(至少对我而言),没有抛出异常并且其他方法继续存在执行。如果我删除 UserTransaction 方法并删除@TransationManagement
注释,则会引发异常,但我无法回滚整个方法。
你们中的任何人都可以告诉我我在这里做错了什么吗?
提前感谢所有帮助。
此致,
恩里科·贝加莫。