简短答案:将您的两个呼叫顺序颠倒为registerStoredProcedureParameter()
:
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
长答案:我对Hibernate源代码进行了一些挖掘,以获取Postgress可调用语句支持,并发现每个registerStoredProcedureParameter()
调用都创建了一个ParameterRegistrationImplementor
实例,该实例被添加到列表中并传递。您会注意到,此类存储了参数的位置,该位置与其在列表中的位置无关。
稍后,将分析此列表,并假定REF_CURSOR
参数将排在第一位,并且如果REF_CURSOR
参数不是第一个参数(无论参数号是) , 都 将抛出错误消息。