PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery avec PostgreSQL et REF_CURSOR

Réponse courte :inversez l'ordre de vos deux appels à registerStoredProcedureParameter() :

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

Réponse longue :j'ai creusé dans le Code source Hibernate pour la prise en charge des instructions appelables Postgress , et a trouvé que chaque registerStoredProcedureParameter() call crée un ParameterRegistrationImplementor instance qui est collée dans une liste et transmise. Vous remarquerez que cette classe stocke la position du paramètre, qui est indépendante de sa position dans la liste.

Plus tard, cette liste est analysé et suppose que le REF_CURSOR sera le premier sur la ligne et renvoie votre message d'erreur si un REF_CURSOR le paramètre n'est pas le premier, quel que soit le numéro du paramètre .

Ce n'est pas une façon très brillante de faire les choses (à mon humble avis), mais au moins la solution de contournement est simple :si vous inversez l'ordre de vos appels, tout devrait bien se passer.