Krátká odpověď:Otočte pořadí svých dvou volání funkce registerStoredProcedureParameter()
:
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
Dlouhá odpověď:Trochu jsem se ponořil do Hibernace zdrojového kódu pro podporu volatelných prohlášení Postgress
a zjistili, že každý registerStoredProcedureParameter()
volání vytvoří ParameterRegistrationImplementor
instance, která se zařadí do seznamu a předá. Všimněte si, že tato třída ukládá pozici parametru, která je nezávislá na jeho pozici v seznamu.
Později je tento seznam analyzováno
a předpokládá, že REF_CURSOR
parametr bude první v řadě a vyvolá vaši chybovou zprávu, pokud REF_CURSOR
parametr není první, bez ohledu na to, jaké je číslo parametru .
Není to příliš jasný způsob, jak věci dělat (IMHO), ale alespoň řešení je snadné:pokud prohodíte pořadí hovorů, měli byste být v pořádku.