Câu trả lời ngắn gọn:Đảo ngược thứ tự của hai lệnh gọi của bạn đến registerStoredProcedureParameter()
:
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);
Câu trả lời dài:Tôi đã đào một số trong Mã nguồn Hibernate để hỗ trợ câu lệnh có thể gọi Postgress
và nhận thấy rằng mỗi registerStoredProcedureParameter()
lệnh gọi tạo ra một ParameterRegistrationImplementor
ví dụ được đưa vào danh sách và được chuyển đi khắp nơi. Bạn sẽ lưu ý rằng lớp này lưu trữ vị trí của tham số, độc lập với vị trí của nó trong danh sách.