PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

JPA 2.1 StoredProcedureQuery com PostgreSQL e REF_CURSORs


Resposta curta:Inverta a ordem de suas duas chamadas para registerStoredProcedureParameter() :
storedProcedure.registerStoredProcedureParameter(1, Object.class, ParameterMode.REF_CURSOR);
storedProcedure.registerStoredProcedureParameter(2, String.class, ParameterMode.IN);

Resposta longa:fiz algumas pesquisas no Código-fonte do Hibernate para suporte a instruções chamáveis ​​do Postgress , e descobri que cada registerStoredProcedureParameter() chamada cria um ParameterRegistrationImplementor instância que é colocada em uma lista e repassada. Você notará que essa classe armazena a posição do parâmetro, que é independente de sua posição na lista.

Mais tarde, esta lista é analisado e assume que o REF_CURSOR será o primeiro na linha e lançará sua mensagem de erro se um REF_CURSOR parâmetro não é o primeiro, independentemente do número do parâmetro .

Não é uma maneira muito brilhante de fazer as coisas (IMHO), mas pelo menos a solução alternativa é fácil:se você trocar a ordem de suas chamadas, deve ficar bem.