Boa tarde pessoal,
Tenho desenvolvido uma aplicação web utilizando hibernate.
Tenho uma classe Painel que possui uma coleção do tipo Set de objetos EtapaDeProducao, entretanto, quando atualizo o objeto dentro da coleção e chamo update (session.update()) ele cria um novo objeto.
O fato relevante é que dois objetos não podem ter o mesmo tipo (Integer) dentro da coleção.
Sobreescrevi os metodos equals() e hashCode() para distingüi-los, mas mesmo assim ele adiciona na collection.
Segue abaixo o código pertinente.
Painel painel = (Painel)pdao.get(Painel.class, idPainel);
// Pega a Etapa segundo o tipo (Integer) caso não exista na coleção um objeto com este tipo retorna NULL
EtapaDeProducao chapaGalvanizada = painel.getEtapaByTipo(EtapaDeProducao.CHAPA_GALVANIZADA);
// SE A ETAPA NÃO EXISTIR - CRIA UMA NOVA
if(chapaGalvanizada == null) {
chapaGalvanizada = new EtapaDeProducao();
chapaGalvanizada.setTipoEtapa(EtapaDeProducao.CHAPA_GALVANIZADA);
// ADICIONA ETAPA AO SET DENTRO DE PAINEL
painel.addEtapa(chapaGalvanizada);
}
// se a etapa já existir ele só modifica o restante dos atributos do objeto
// ...
session.update(painel);
A maneira que eu implementei os metodos equals e hashCode segue abaixo:
public boolean equals(Object etapa) {
if(!(etapa instanceof EtapaDeProducao))
return false;
if(this == etapa)
return true;
EtapaDeProducao etapa2 = (EtapaDeProducao)etapa;
if(this.getTipoEtapa().equals(etapa2.getTipoEtapa()))
return true;
return false;
}
public int hashCode() {
return getTipoEtapa() * 39;
}
Alguém teria alguma sugestão para eu resolver este problema?
Agradeço desde já a atenção.