调用存储过程时JPA事务出错

时间:2015-03-18 08:30:40

标签: oracle jpa transactions ejb-3.0

我在Oracle DB中有一个存储过程,我希望使用以下JPA代码从EJB AS(websphere)调用它。 该程序包括一些" COMMIT"在它的身体里。关键是当我删除过程的COMMIT时,JPA能够正确地调用该过程。如果我离开COMMIT然后我得到一个异常,告诉我无法执行调用。

java代码放在会话bean中,默认情况下事务设置为REQUIRED。

    public void updateProc() {
       Query query = entityManager.createNativeQuery("call UPDATE_MYPROC()");
       query.executeUpdate();
    }

我认为问题与交易有关,但不确定。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您正在使用容器来管理持久性。通过使用事务REQUIRED,JPA将为每次调用数据库启动一个新事务。因此,没有必要在存储过程中启动或提交事务。事实上,这是一个坏主意。

您没有提到是否在存储过程中启动了一个新事务,只是在那里有一个提交。如果您不启动(新)事务,则该提交将导致问题。即使你这样做,也没必要,这就是我们开始使用JPA的那种东西。