【问题标题】:Spring Data JPA : Stored Procedure with Schema NameSpring Data JPA:具有模式名称的存储过程
【发布时间】:2018-07-12 04:56:33
【问题描述】:

如果有人经历过从 spring 数据中调用 oracle 存储过程,请指定模式、包和过程名称。 我有以下实体:

@Entity
@Table(name = "ENTITY", schema = "SCHEMA_ENTITY")
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(name = "name1",
    procedureName = "packageName.procName",
    parameters = {
        @StoredProcedureParameter(mode = ParameterMode.IN, name = "param1", type = String.class),
        @StoredProcedureParameter(mode = ParameterMode.OUT, name = "return_value", type = BigDecimal.class)
    })})

public class EntityExp {

     @Id
    private Long keyId;
    ...
}

存储库:

 public interface EntityRepository extends JpaRepository<EntityExp, Long> {

   @Procedure(name = "name1")
   BigDecimal test(@Param("param1") String param1);
}

在服务实现中,自动装配后,我调用如下过程:

BigDecimal returnVal = entityRepository.test(param1);

oracle存储过程定义为:

create or replace PACKAGE packageName as
          function procName(param1 IN VARCHAR)
               RETURN NUMBER;
END packageName;
create or replace PACKAGE BODY packageName
        IS
        function procName (param1 IN VARCHAR) 
        RETURN NUMBER
        IS
        BEGIN
        return 1;
        END;
        END;

如果我使用 PL/Sql 调用它,该过程可以正常工作。

我收到以下错误:

PLS-00201: identifier 'package.procName' must be declared

我还测试了许多配置,例如在过程中指定架构:

@Procedure(name = "SCHEMA_ENTITY.name1")
BigDecimal test(@Param("param1") String param1);

但还是失败了……

我在调用存储过程时找不到任何使用 schema + package + procedureName 的示例...

有什么建议吗?

【问题讨论】:

    标签: oracle jpa stored-procedures spring-data


    【解决方案1】:

    我不太确定是否完全理解您的问题,但我会尝试分享一些信息,因为我最近遇到了相关问题。

    第一项与调用存储过程的方式有关。看起来 Spring-data 目前不支持存储过程的返回类型。欲了解更多信息link。但是,使用 void 可以正常工作。

    我通过创建一个单独的Repository 解决了这个问题,我在其中调用通过entityManager 返回结果的过程。一个说明link的例子。

    第二项是关于模式名称。我相信当您解决第一项时,您可以使用this question 来尝试解决它。简而言之,我在procedureName注解属性名称中设置了架构名称。

    @NamedStoredProcedureQuery(
            name="procName",
            procedureName="<schema_name>.proc_name"
    )
    @Entity
    @Table
    public class User {
    ...
    }
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-12-26
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      相关资源
      最近更新 更多