Olá amigos,
Estou desenvolvendo meu projeto final, com struts 2 e hibernate.
Tenho dois problemas críticos, que estão me tirando o sono.
O primeiro, quando atualizo um objeto o hibernate atualiza no banco de dados mas quando dou um "findById" ele me retorna o objeto antigo sem as alterações que foram alteradas.
Segue o código do método de atualização:
Obs: Ao alterar um cliente, excluo todos seus telefones e incluo novamente os que estão presentes na tela (métodos excluirTelefones e incluirTelefones)
try {
HibernateSessionFactory.getSession().getTransaction().begin();
cCliente = recuperarFscPorId(cCliente.getCd());
cCliente.setNm(cCliente.getNm());
cCliente.setDtNasc(cCliente.getDtNasc());
cCliente.setEmail(cCliente.getEmail());
cCliente.setDcr(cCliente.getDcr());
cCliente.setLogd(cCliente.getLogd());
cCliente.setUsuario(usuario);
cCliente.setMaxCmp(cCliente.getMaxCmp());
cCliente.setPlcVeic(MaskUtil.removeMask(cCliente.getPlcVeic()));
cCliente.setCpf(MaskUtil.removeMask(cCliente.getCpf()));
cCliente.setCep(MaskUtil.removeMask(cCliente.getCep()));
cCliente.setSitCliente(getSitClienteDAO().findById(cdSitCli));
//Caso o código da cidade seja nulo, indica que a cidade permanece a mesma
if (cdCidade != null){
cCliente.setCidade(getCidadeDAO().findById(cdCidade));
}
HibernateSessionFactory.getSession().saveOrUpdate(cCliente);
excluirTelefones(cCliente.getCd());
incluirTelefones(telefones, cdsTipTel, cCliente);
HibernateSessionFactory.getSession().getTransaction().commit();
HibernateSessionFactory.getSession().flush();
HibernateSessionFactory.getSession().refresh(cCliente);
} catch (Exception re) {
HibernateSessionFactory.getSession().getTransaction().rollback();
throw re;
}
O outro erro é esta exceção também na hora de atualizar. Nem sempre ela aparece (isso é o que mata):
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
Fico muito grato à aqueles que puderem me dar uma força!
Abraços!