PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery con PostgreSQL e REF_CURSOR

Risposta breve:inverti l'ordine delle tue due chiamate a registerStoredProcedureParameter() :

storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);

Risposta lunga:ho scavato un po' in Codice sorgente in sospensione per il supporto dell'istruzione callable Postgress e ha scoperto che ogni registerStoredProcedureParameter() chiamata crea un ParameterRegistrationImplementor istanza che viene inserita in un elenco e passata. Noterai che questa classe memorizza la posizione del parametro, che è indipendente dalla sua posizione all'interno dell'elenco.

Successivamente, questo elenco è analizzato e presuppone che il REF_CURSOR il parametro sarà il primo della riga e genererà il tuo messaggio di errore se un REF_CURSOR parametro non è il primo, indipendentemente dal numero del parametro .

Non è un modo molto brillante di fare le cose (IMHO), ma almeno la soluzione è facile:se cambi l'ordine delle tue chiamate, dovresti andare bene.