【问题标题】:Spring Jpa Multiple output paramters in stored procedure - Exception "No property found for type"Spring Jpa 存储过程中的多个输出参数 - 异常“找不到类型的属性”
【发布时间】:2020-11-13 07:39:50
【问题描述】:

我使用spring-data-jpa:2.1.9.RELEASE(Spring boot 2.1.6 RELEASE)调用oracle存储过程

程序:

procedure proc(data in varchar2, res1 out number, res2 out number)
begin
  insert into table (id, data) values (abc.hibernate_sequence.nextval, data)
  returning id into res1;
  res2 := id*5;
end proc;

实体

@Entity
@Table(name = "table", schema = "abc')
@NamedStoredProcedureQuery(name = "testName", procedureName = "proc", parameters = {
    @StoredProcedureParameter(mode = ParameterMode.IN, name = "data", type = String.class),
    @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res1", type = Long.class),
    @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res2", type = Long.class) 
})
public class testEntity { ... }

存储库

@Repository
public interface TestEntityRepository extends JpaRepository<TestEntity, Long> {

  @Transactional
  @Procedure(name = "testName")
  Map<String, Long> procedure(@Param("data") String data);
}

当我开始申请时:

IllegalArgumentException: Failed to create query for method public abstract java.util.Map TestEntityRepository.procedure(java.lang.String)! 
No property procedure found for type TestEntity

如果我使用只有 1 个输出参数的存储过程,一切都很好。

【问题讨论】:

    标签: java oracle stored-procedures spring-data-jpa


    【解决方案1】:

    spring-data-jpa:2.2.0.RELEASE之前的@Procedure注解只能获取一个out参数。

    如果您无法更改依赖版本,则必须使用以下代码使其工作:

    StoredProcedureQuery query = this.em.createNamedStoredProcedureQuery("testName");
    query.setParameter("data", "data_value");
    query.execute();
    Long sum = (Long) query.getOutputParameterValue("res1");
    Long sum = (Long) query.getOutputParameterValue("res2");
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 2023-01-25
      相关资源
      最近更新 更多