23

Ho una semplice procedura memorizzata che sto utilizzando per testare la funzione Stima procedura Spring Data JPA.Spring Data JPA NamedStoredProcedureQuery Parametri Multiple Out

create or replace procedure plus1inout (arg in int,res1 out int,res2 out int) is 
BEGIN 
res1 := arg + 1; 
res2 := res1 + 1; 
END; 

Il mio codice è:

@Repository 
public interface AdjudConverDateSPRepository extends JpaRepository<AdjudConverDateSP, Long> { 
    @Procedure(name = "plus1") 
    Object[] plus1(@Param("arg") Integer arg); 
} 

@Entity 
@NamedStoredProcedureQuery(name = "plus1", procedureName = "ADJUD.PLUS1INOUT", 
     parameters = { 
     @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class), 
     @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res1", type = Integer.class), 
     @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res2", type = Integer.class) 
}) 
public class AdjudConverDateSP implements Serializable { 
     //stub to satisfy hibernate identifier requirement 
     @Id @GeneratedValue 
     private Long id; 

} 

Tutto funziona bene quando ho un singolo parametro OUT. Ma una volta aggiunto un secondo parametro OUT, ricevo un'eccezione dicendo che non è possibile trovare la procedura nell'entità.

Caused by: 
    org.springframework.data.mapping.PropertyReferenceException: No property plus1 found for type AdjudConverDateSP! at 
    org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:75) at 
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:327) at 
    org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307) at 
    org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) at 
    org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) at 
    org.springframework.data.repository.query.parser.Part.<init>(Part.java:76) at 
    org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:235) at 
    org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:373) at 
    org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:353) 
+0

Quale versione di Spring Data JPA stai usando? –

+0

Spring-Data JPA versione 1.8.0 –

+0

C'è un problema nel repository git per questo https://github.com/spring-projects/spring-data-examples/issues/80 ... questa sarebbe la risposta quando arrivare ad essa. –

risposta

5

Sembra @Procedure si aspetta solo un parametro di OUT che è binded direttamente al tipo di metodo di ritorno ...

di gestire più OUT params è possibile utilizzare l'API JPA direttamente:

StoredProcedureQuery proc = em.createNamedStoredProcedureQuery("plus1"); 

proc.setParameter("arg", 1); 
proc.execute(); 
Integer res1 = (Integer) proc.getOutputParameterValue("res1"); 
Integer res2 = (Integer) proc.getOutputParameterValue("res2"); 
... 
+0

In ultima analisi, l'utilizzo dell'API JPA è ciò che ho fatto. Dove hai trovato che @Procedure si aspetta un solo parametro OUT? –

+1

L'API esclude solo un parametro OUT http://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/query/Procedure.html –

+0

puoi fornire esempio completo Sono nuovo e non è in grado di chiamare la procedura Stored Named tramite il gestore di entità. –

Problemi correlati