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

Error with JPA transaction when calling a stored procedure

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

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

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

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

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

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