Opa
Recebo seguinte erro após eu forçar uma violação de chave única. Eu forço a violação, ai eu trato a exceção e lanço que aquele valor já existe no banco, mas quando altero o valor e coloco para salvar de novo, acontece isso:
Alguém sabe o pq do hibernate lançar esse erro?
Meu método de salvar está assim:
public void salvarOperador(){
getFuncionarioBean().setEmpresa(funcionarioRoot.getEmpresa());
getFuncionarioBean().getLogin().setSenha(gerarMD5(getFuncionarioBean().getLogin().getSenha()));
getFuncionarioBean().getLogin().setNivel(2);
getFuncionarioBean().getLogin().setFuncionario(getFuncionarioBean());
FuncionarioDAO dao = new FuncionarioDAO(FuncionarioBean.class);
logger.info("Cadastrar Funcionario para Empresa de ID: " + funcionarioRoot.getEmpresa().getId());
dao.save(getFuncionarioBean());
}
DAO
public void save(Object object) {
try
{
session = HibernateSessionFactory.getInstance().openSession();
logger.info("Preparando para salvar objeto: [ " + classe.getSimpleName() + " ]");
transaction = session.beginTransaction();
session.save(object);
transaction.commit();
logger.info("Objeto [ " + classe.getSimpleName() + " ] salvo com sucesso");
} catch (Exception ex) {
logger.error("Erro ao salvar objeto: [ " + classe.getSimpleName() + " ]", ex);
mapaErros.put("erroSalvarException", ex);
SendMail sendEmail = new SendMail("Erro ao salvar objeto: [ " + classe.getSimpleName() + " ]", ex);
sendEmail.run();
rollback();
} finally {
try {
if(session.isOpen()){
logger.info("Finalizando sessao");
session.close();
}
} catch (HibernateException hex) {
mapaErros.put("erroFinalizarSessao", hex);
SendMail sendEmail = new SendMail("Erro ao finalizar sessao: ", hex);
sendEmail.run();
logger.error("Erro ao finalizar sessao", hex);
}
}
}
E o relacionamento está da seguinte maneira ( Empresa - Funcionario - Carga - Login):
EmpresaBean
@OneToMany(mappedBy="empresa", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<FuncionarioBean> funcionarios = new ArrayList<FuncionarioBean>();
FuncionarioBean
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_empresa", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
private EmpresaBean empresa;
@OneToMany(mappedBy="funcionario", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private Collection<CargaBean> cargas = new ArrayList<CargaBean>();
@OneToOne(mappedBy = "funcionario", fetch=FetchType.LAZY)
@Cascade(CascadeType.ALL)
private LoginBean login = new LoginBean();
LoginBean
@OneToOne
@JoinColumn(name = "id_funcionario")
@Cascade(CascadeType.ALL)
private FuncionarioBean funcionario;
CargaBean
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id_funcionario", insertable=true, updatable=true)
@Fetch(FetchMode.JOIN)
private FuncionarioBean funcionario;
Eu desconfio que seja algo com o relacionamento entre elas. Alguém pode me ajudar?
[]'s