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.