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.