Krótka odpowiedź:odwróć kolejność dwóch wywołań registerStoredProcedureParameter()
:
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
Długa odpowiedź:trochę kopałem w Kod źródłowy hibernacji do obsługi wywoływanych instrukcji Postgress
i okazało się, że każda registerStoredProcedureParameter()
wywołanie tworzy ParameterRegistrationImplementor
instancja, która zostaje dołączona do listy i przekazana. Zauważysz, że ta klasa przechowuje pozycję parametru, która jest niezależna od jego pozycji na liście.