【问题标题】:Error with JPA transaction when calling a stored procedure调用存储过程时 JPA 事务出错
【发布时间】:2015-05-20 22:48:53
【问题描述】:

我在 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();
    }

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

【问题讨论】:

  • 是的,问题出在交易中。你用的是什么锁定模式?
  • 看看link
  • 如果您不想从过程中删除 COMMIT,请尝试为会话 bean 中的方法设置 NOT_SUPPORTED。
  • 使用 NOT_SUPPORTED 我遇到了同样的问题:下级会话中不允许 ora-02089 提交
  • 可以不使用XA Datasourse吗?

标签: oracle jpa transactions ejb-3.0


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 2013-12-18
    • 2015-12-23
    • 2014-08-16
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多