sábado, 1 de fevereiro de 2014

Necessitando executar uma function oracle que executa update e retorna um valor: Como usar com o projeto usando Hibernate e JPA2

Em um projeto que trabalho necessitamos acessar uma function do Oracle que grava dados em algumas tabelas e me retorna um inteiro para que possa manipular.

Em alguns estudos que realizei "Google", achava que o usando as funcionalidades do JPA2 me oferece resolveria meu problema, mas logo percebi que gerava um erro de indice, onde o dado demorava um time para ser processado na function e o JPA2 já havia executado sua funcionalidade sem esperar o retorno das querys.

Para solucionar este problema, usei CallableStatement mas recuperando a sessão do JPA2 e funcionou após algumas tentativas de acertar a query. segue a solução:

StringBuilder sb = new StringBuilder();
sb.append(" A query aqui ");

Connection con = ((Session)em.getDelegate()).connection();
CallableStatement st = null;
try {
st = con.prepareCall(sb.toString());
st.registerOutParameter(1, Types.INTEGER);
st.setString(2, doc.getModeloDocumento().getTipoDocumento().getCoSeqTipoDocumento().toString());
st.execute();
numero = st.getObject(1).toString();
st.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}

Acredito que quem tenha este problema ou já passou por algo está solução possa resolver seu problema.

Qualquer coisa deixe sua mensagem.

Nenhum comentário:

Postar um comentário