Respuesta corta:invierta el orden de sus dos llamadas a registerStoredProcedureParameter()
:
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
Respuesta larga:investigué un poco en Código fuente de Hibernate para la compatibilidad con declaraciones llamables de Postgress
, y encontró que cada registerStoredProcedureParameter()
la llamada crea un ParameterRegistrationImplementor
instancia que se agrega a una lista y se pasa de un lado a otro. Notará que esta clase almacena la posición del parámetro, que es independiente de su posición dentro de la lista.
Posteriormente, esta lista es analizado
y asume que el REF_CURSOR
El parámetro será el primero en la línea y arrojará su mensaje de error si un REF_CURSOR
el parámetro no es el primero, sin importar cuál sea el número del parámetro .
No es una forma muy brillante de hacer las cosas (en mi humilde opinión), pero al menos la solución es fácil:si cambias el orden de tus llamadas, deberías estar bien.