调用存储过程时 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 开始的那种东西。
我在 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 开始的那种东西。