Erro ao chamar StoredProcedure JPA

Pessoal, boa tarde!
Estou tentando chamar uma procedure e um dos parâmetros é tanto de entrada quanto de saída, porém estoura o erro: Unable to extract OUT/INOUT parameter value; nested exception is org.hibernate.exception.GenericJDBCException: Unable to extract OUT/INOUT parameter value

Alguém saberia dizer onde está o erro?

Segue abaixo código:

"@Entity
@NamedStoredProcedureQueries({
@NamedStoredProcedureQuery(
name = “Proc3.getTeste”,
procedureName = “sp_iSolicitacaoSistema”,
resultClasses = { Proc3.class },
parameters = {
@StoredProcedureParameter(name = “pt_xml”,type = String.class, mode = ParameterMode.IN),
@StoredProcedureParameter(name = “pi_solicitacao”,type = Integer.class, mode = ParameterMode.INOUT)
})
})
public class Proc3 {

@Id
@Column(name="pi_solicitacao")
private Integer piSolicitacao;

}

public interface Proc3Repository extends CrudRepository<Proc3, Integer>{

@Procedure(“spoc3_iSolicitacaoSistema”)
public Proc3 getTeste(@Param(“pt_xml”) String pt_xml, @Param(“pi_solicitacao”) Integer pisolicitacao);
}"

Trecho da chamada:
"Proc3 testeSQL = proc3Repo.getTeste(xml,0);

Procedure:

GO

DECLARE @RC int
DECLARE @pt_xml varchar(max)
DECLARE @pi_solicitacao int = 0

– TODO: Set parameter values here.

set @pt_xml = ‘<?xml version="1.0" encoding="ISO-8859-1"?>’

EXECUTE @RC = [dbo].[spoc3_iSolicitacaoSistema]
@pt_xml
,@pi_solicitacao OUTPUT

set @pi_solicitacao = 123;
GO"

Opa.

Cara pelo que entendi sua proc não esta retornando os resultados esperados pela JPA, veja se realmente @pi_solicitacao eh INOUT ou somente IN e se ela esta realmente executando um SELECT para preencher o objeto Proc3.

\o

Então cara isso é legado pra variar né haha
Mas pelo que vi existe uma rotina em .net que executa essa procedure e obtém o retorno.
Olhei na proc e ela tá com IN OUT sim

Opa.

Legal então, dentro da procedure existe algum select que quando vc chama diretamente a procedure aparece o resultado para vc desse select ?

\o

Quando executo a procedure direto na base ele não me retorna nada (o que achei estranho) mas executa com sucesso, quando olhei o q ela fazia vi que ele apenas faz um set @pi_solicitacao = NNN
No meu ponto de vista deveria ter um select ou return, mas não tem, o que chama a atenção é outra rotina tá funcionando

Obs.: não tenho autonomia não base de dados pra alterar a proc e nem criar uma nova para teste :confused:

Usa JDBC diretamente, muito mais simples e menos overhead.

https://www.mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/

Acabei mudando a estratégia, não é o que queria, mas ta funcionando e é o que importa rs…

public Integer procedureJdbcTemplate() {
List parameters = Arrays.asList(new SqlParameter(Types.VARCHAR), new SqlOutParameter(“pi_solicitacao”, Types.INTEGER));

    Map<String, Object> call = jdbcTemplate.call(new CallableStatementCreator() {
        @Override
        public CallableStatement createCallableStatement(Connection con) throws SQLException {
            CallableStatement callableStatement = con.prepareCall("{call spoc3_iSolicitacaoSistema(?, ?)}");
            callableStatement.setString(1, pi_xml);
            callableStatement.registerOutParameter(2, Types.INTEGER);
            return callableStatement;
        }
    }, parameters);
    
    return (Integer) call.get("pi_solicitacao");
}