I have a simple stored procedure I\'m using to test out Spring Data JPA Stored Procedure feature.
create or replace procedure plus1inout (arg in int,res1 out int
Spring Data JPA support multiple output parameters. Return type of Method must be a Map. I spent a lot of time on this. Below link exactly gives example of that, Search for User.plus1IO2.
User.java
UserRepository.java
Spring doesn't support multiple out params just yet. There is a JIRA for this.
It looks like @Procedure
expects only one OUT parameter which is binded directly to the method return type...
To handle multiple OUT params you can use the JPA API directly:
StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("plus1");
proc.setParameter("arg", 1);
proc.execute();
Integer res1 = (Integer) proc.getOutputParameterValue("res1");
Integer res2 = (Integer) proc.getOutputParameterValue("res2");
...
You can specify to return one of the multiple out params with the outputParameterName
param in the @Procedure
annotation like this:
@Repository
public interface AdjudConverDateSPRepository extends JpaRepository<AdjudConverDateSP, Long> {
@Procedure(name = "plus1", outputParameterName = "res2")
Integer plus1(@Param("arg") Integer arg);
}
UPDATE 2019-06-24:
Multiple out parameters is now supported in Spring Data JPA 2.2-RC1 https://spring.io/blog/2019/06/17/spring-data-moore-rc1-and-lovelace-sr9-released
https://jira.spring.io/browse/DATAJPA-707
The interface method just needs to have a Map return type so each out param can be accessed by key name:
@Repository
public interface AdjudConverDateSPRepository extends JpaRepository<AdjudConverDateSP, Long> {
@Procedure(name = "plus1")
Map<String, Object> plus1(@Param("arg") Integer arg);
}