PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery mit PostgreSQL und REF_CURSORs

Kurze Antwort:Kehren Sie die Reihenfolge Ihrer beiden Aufrufe von registerStoredProcedureParameter() um :

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

Lange Antwort:Ich habe im Hibernate-Quellcode für Postgress-Callable-Statement-Unterstützung , und festgestellt, dass jeder registerStoredProcedureParameter() Aufruf erstellt einen ParameterRegistrationImplementor Instanz, die in eine Liste aufgenommen und herumgereicht wird. Sie werden feststellen, dass diese Klasse die Position des Parameters speichert, die unabhängig von seiner Position innerhalb der Liste ist.

Später ist diese Liste analysiert und geht davon aus, dass der REF_CURSOR Der Parameter steht an erster Stelle und gibt Ihre Fehlermeldung aus, wenn ein REF_CURSOR Parameter steht nicht an erster Stelle, unabhängig von der Parameternummer .

Keine sehr kluge Art, Dinge zu tun (IMHO), aber zumindest ist die Problemumgehung einfach:Wenn Sie die Reihenfolge Ihrer Aufrufe vertauschen, sollte alles in Ordnung sein.