Hibernate equals() e hashCode()

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.