【发布时间】:2012-12-11 10:47:31
【问题描述】:
我对 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(列不为空)以确保会有异常,但由于某些未知原因(至少对我而言),没有抛出异常,而另一个方法不断被执行。如果我删除 UserTransaction 方法并删除 @TransationManagement 注释,则会抛出异常,但我无法回滚整个方法。
谁能告诉我我在这里做错了什么?
提前感谢所有帮助。
最好的问候,
恩里科·贝加莫。
【问题讨论】:
标签: jpa jakarta-ee transactions ejb