我在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();
}
我认为问题与交易有关,但不确定。有人可以帮忙吗?谢谢!
答案 0 :(得分:2)
您正在使用容器来管理持久性。通过使用事务REQUIRED,JPA将为每次调用数据库启动一个新事务。因此,没有必要在存储过程中启动或提交事务。事实上,这是一个坏主意。
您没有提到是否在存储过程中启动了一个新事务,只是在那里有一个提交。如果您不启动(新)事务,则该提交将导致问题。即使你这样做,也没必要,这就是我们开始使用JPA的那种东西。