Srs, tenhho um aplicação que usa Hibernate com Store Procedures para fazer pesquisas.
Meu problema uma procedure, se eu executar manualmente me retorna 3 linhas conforme o esperado, porem quando exevuto pelo hibernate recebo de retorno 3 linhas porém estas tres linhas são iguais. É como se o primeiro registro fosse duplicado nos outros dois.
No arquivo de mapeamento a proc esta assim :
<sql-query name="listaCarros" callable="true">
<return alias="listaCarros" class="CarroEntity"/>
{call DBAPRD1.pSeltCarro (?)}
</sql-query>
Ao chamar no java faço assim
Assim que executo a linha acima, recebo de retorno 3 linhas iguais. Um resultado diferente se rodo a procedure em um cliente de banco.
Alguem tem uma dica do que eu poderia verificar, ou o que pode causar este problema ?
Vlew
Zenas
Abril 19, 2011, 12:33pm
#2
Olá Amigo,
Quando eu utilizava procedure com hibernate, eu utilizava sql nativo com o postgres, e chamava a procedure da seguinte forma descrita abaixo:
public List montaTabelaTabnet() throws DAOException{
try{
Session s = HibernateUtil.getSession();
String sql = " SELECT * FROM rhcnet_tabela_hospitalar() ";
Query q = s.createSQLQuery( sql )
.addScalar("OUT_ANO", Hibernate.STRING)
.addScalar("OUT_TOTAL_CASOS", Hibernate.STRING)
.addScalar("OUT_TOTAL_ANALITICO", Hibernate.STRING)
.addScalar("OUT_TOTAL_NAO_ANALITICO", Hibernate.STRING)
.addScalar("OUT_PERC_GERAL", Hibernate.STRING)
.addScalar("OUT_PERC_ANALITICO", Hibernate.STRING)
.addScalar("OUT_PERC_NAO_ANALITICO", Hibernate.STRING);
List<ItemAnoTabnet> resultado = new ArrayList<ItemAnoTabnet>();
List<Registro> retorno = q.list();
Iterator it = retorno.iterator();
while ( it.hasNext() ){
Object[] linha = (Object[]) it.next();
resultado.add( new ItemAnoTabnet(
Integer.parseInt( linha[0].toString() ),
linha[1] != null ? Double.parseDouble( linha[1].toString() ) : 0,
linha[2] != null ? Double.parseDouble( linha[2].toString() ) : 0,
linha[3] != null ? Double.parseDouble( linha[3].toString() ) : 0,
linha[4] != null ? linha[4].toString() : "0",
linha[5] != null ? linha[5].toString() : "0",
linha[6] != null ? linha[6].toString() : "0"
) );
}
return resultado;
}catch( HibernateException e ){
e.printStackTrace();
return null;
}
}
Onde [ rhcnet_tabela_hospitalar() ] é uma procedure.
Espero ter ajudado,
Abraços