[Resolvido]Procedure Firebird e Hibernate 4

Boa tarde a todos,

Comecei a estudar hibernate + spring cheguei em uma parte que não consigo descobrir sozinho.

Eu tenho um banco de dados firebird com uma procedure que me retorna o estoque de um determinado produto.

Essa procedure recebe 5 parametros como codigo da empresa, data, codigo do produto, etc.
e me retorna um double com o total em estoque.

Procurei em diversos sites e no google um meio de executar essa procedure utilizando o hibernate 4, porém não obtive sucesso.

consegui executar via SQLQUERY porém recebo alguns valores estranhos como retorno.
Executando o seguinte código:

SQLQuery estoque = getSession().createSQLQuery("SELECT * FROM SALDO(?,?,?,?,?)");

Recebo o seguinte retorno: Estoque :2.2737367544323206E-13

Executando pelo ibexpert pude verificar que o saldo do produto em questão é 0.

Alguém pode me dar um exemplo de execução de SP no hibernate?
Os exemplo que achei nao consegui compreender.

Obrigado.

Posta o código da procedure e todo código envolvendo a execução da query em Java.

Bom dia javaflex. O código da procedure não posso postar por ser de um software de terceiro, mas ela retorna um double precision. Via IBexpert ao executá-la o resultado está correto.

O que eu quero é integrar os meus aplicativos via WebServiceRestfull a um software já existente.
Sobre o código que executa a procedure seria esse:

		    SQLQuery estoque = getSession().createSQLQuery("SELECT * FROM SALDO(?,?,?,?)");
			estoque.setParameter(0, Integer.parseInt(codemp));				
			estoque.setParameter(1, 1);
			estoque.setParameter(2, prod.getCodprod());			
			estoque.setParameter(3,java.sql.Date.valueOf(java.time.LocalDate.now()));				

			double qtde = (double) estoque.list().get(0);
            System.out.println("Estoque :" + qtde);

Vai por partes. Copia e cola no createSQLQuery exatamente o código que funcionou no IBExpert, com parâmetros cravados. E se é um único valor retornado, usa uniqueResult.

Object resultado = getSession().createSQLQuery("SELECT nome_coluna FROM procedure(....)").uniqueResult();
System.out.println(resultado); 

Faz funcionar assim primeiro, depois você lida com a parte de setar parâmetros e tipo de retorno do Java.

Bom dia meu amigo.
Passei somente para lhe agradecer pelo empenho em ajudar.

Final de semana me concentrei bastante e na questão e consegui resolver.
Na verdade o problema não está no hibernate ou no retorno dos dados.

Fui no ibexpert e selecionei um produto como teste e obtive o resultado 16,000. Sem querer acabei clicando na linha do registo e vi que na verdade o ibexper através do double precision já estava arredondando o valor que na verdade era 16,000000000000001 que é o valor que o hibernate estava recebendo.

Para resolver essa situação criei uma classe utilitário onde criei um metodo que recebe uma String e converte para BigDecimal, dessa forma eu consegui chegar no valor que preciso.

System.out.println("Estoque: " + Util.stringForBigDecimal(qtde.toString(), 2, BigDecimal.ROUND_HALF_UP);