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



