Spring Jpa 存储过程中有多个输出参数 - 异常 "No property found for type"
Spring Jpa Multiple output paramters in stored procedure - Exception "No property found for type"
我调用 oracle 存储过程使用 spring-data-jpa:2.1.9.RELEASE (Spring boot 2.1.6 RELEASE)
程序:
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 个输出参数的存储过程,一切都很好。
在spring-data-jpa:2.2.0.RELEASE.[之前使用@Procedure
注解只能获取一个out参数。 =12=]
如果您不能更改依赖版本,那么您将不得不使用以下代码使其工作:
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");
我调用 oracle 存储过程使用 spring-data-jpa:2.1.9.RELEASE (Spring boot 2.1.6 RELEASE)
程序:
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 个输出参数的存储过程,一切都很好。
在spring-data-jpa:2.2.0.RELEASE.[之前使用@Procedure
注解只能获取一个out参数。 =12=]
如果您不能更改依赖版本,那么您将不得不使用以下代码使其工作:
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");