sql >> Databáze >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery s PostgreSQL a REF_CURSORs

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.




  1. Sloučit agregované páry klíč/hodnota z pole JSONB?

  2. Proč k této chybě došlo při vytvoření EVENT se složeným příkazem?

  3. Duplicitní záznamy v DB

  4. Seznam vs. sada na JPA 2 – výhody / nevýhody / pohodlí