Problema com persistência de dados

Preciso fazer o seguinte:

Tenho um objeto 1 do tipo A que é utilizado para mapear uma consulta do banco X
Tenho outro objeto 2 também do tipo A que é utilizado para mapear uma consulta do banco Y
Ou seja, ambos os objetos são idênticos apenas referenciam tabelas diferentes.

Em resumo;

  1. Quando o resultado do objeto 2 for vazio ou diferente do objeto 1, copiar os dados do objeto 1 para o objeto dois e persistir no banco Y.

Meu código:

ObjDto objetoReferencia = repository.buscarDadosBaseX(1);

Optional<ObjDto> registroAntigo = repository.buscarDadosBaseY(1);

// Quando não existir registro na base Y, copiar objeto da base X e persistir na base Y
if (!registroAntigo.isPresent()){
ObjDto novoRegistro = objetoReferencia;
repository.save(novoRegistro);
} else {
// Quando objetos forem diferentes, atualizar conforme objeto de referencia
if (!objetoReferencia.equals(registroAntigo)){
registroAntigo = objetoReferencia;
repository.update(registroAntigo);
}

Problemas:

  1. Implementei hashCode e equals no objeto “ObjDto” mas mesmo qd os objetos estão preenchidos com as mesmas informações aparece que eles são diferentes
  2. Simplesmente quando chamo método de salvar/atualizar nada acontece. O hibernate não faz os comandos e nenhuma exceção é lançada.

Alguma dica de como posso resolver meu problema?

Obrigado!

Posta a implementação dos métodos equals e hashCode.

Se quiser, há algum tempo escrevi estes exemplos:

A classe não é ObjDto propriamente dita, usei esse nome só para ficar mais facil de entender.
O nome correto é S1000Dto.

Usei gerador de hashCode e equals do intelij.

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

    S1000Dto s1000Dto = (S1000Dto) o;
    if (id != null ? !id.equals(s1000Dto.id) : s1000Dto.id != null) return false;
    if (tipoPessoa != null ? !tipoPessoa.equals(s1000Dto.tipoPessoa) : s1000Dto.tipoPessoa != null) return false;
    if (cgc != null ? !cgc.equals(s1000Dto.cgc) : s1000Dto.cgc != null) return false;
    if (razaoSocial != null ? !razaoSocial.equals(s1000Dto.razaoSocial) : s1000Dto.razaoSocial != null)
        return false;
    if (classifricacaoTributaria != null ? !classifricacaoTributaria.equals(s1000Dto.classifricacaoTributaria) : s1000Dto.classifricacaoTributaria != null)
        return false;
    if (naturezaJuridica != null ? !naturezaJuridica.equals(s1000Dto.naturezaJuridica) : s1000Dto.naturezaJuridica != null)
        return false;
    if (indCooperativa != null ? !indCooperativa.equals(s1000Dto.indCooperativa) : s1000Dto.indCooperativa != null)
        return false;
    if (indConstrutora != null ? !indConstrutora.equals(s1000Dto.indConstrutora) : s1000Dto.indConstrutora != null)
        return false;
    if (indDesoneracao != null ? !indDesoneracao.equals(s1000Dto.indDesoneracao) : s1000Dto.indDesoneracao != null)
        return false;
    if (indRegEletronicoFunc != null ? !indRegEletronicoFunc.equals(s1000Dto.indRegEletronicoFunc) : s1000Dto.indRegEletronicoFunc != null)
        return false;
    if (indEntidadeEducativa != null ? !indEntidadeEducativa.equals(s1000Dto.indEntidadeEducativa) : s1000Dto.indEntidadeEducativa != null)
        return false;
    if (indEmpresaTrabTemporario != null ? !indEmpresaTrabTemporario.equals(s1000Dto.indEmpresaTrabTemporario) : s1000Dto.indEmpresaTrabTemporario != null)
        return false;
    if (dadosIsencao != null ? !dadosIsencao.equals(s1000Dto.dadosIsencao) : s1000Dto.dadosIsencao != null)
        return false;
    if (respDpNome != null ? !respDpNome.equals(s1000Dto.respDpNome) : s1000Dto.respDpNome != null) return false;
    if (respDpCpf != null ? !respDpCpf.equals(s1000Dto.respDpCpf) : s1000Dto.respDpCpf != null) return false;
    if (respDpTelefone != null ? !respDpTelefone.equals(s1000Dto.respDpTelefone) : s1000Dto.respDpTelefone != null)
        return false;
    if (respDpEmail != null ? !respDpEmail.equals(s1000Dto.respDpEmail) : s1000Dto.respDpEmail != null)
        return false;
    if (softwareCnpj != null ? !softwareCnpj.equals(s1000Dto.softwareCnpj) : s1000Dto.softwareCnpj != null)
        return false;
    if (softwareRazao != null ? !softwareRazao.equals(s1000Dto.softwareRazao) : s1000Dto.softwareRazao != null)
        return false;
    if (softwateNomeContato != null ? !softwateNomeContato.equals(s1000Dto.softwateNomeContato) : s1000Dto.softwateNomeContato != null)
        return false;
    if (softwateFoneContato != null ? !softwateFoneContato.equals(s1000Dto.softwateFoneContato) : s1000Dto.softwateFoneContato != null)
        return false;
    if (softwareEmailContato != null ? !softwareEmailContato.equals(s1000Dto.softwareEmailContato) : s1000Dto.softwareEmailContato != null)
        return false;
    return situacaoEspecial != null ? situacaoEspecial.equals(s1000Dto.situacaoEspecial) : s1000Dto.situacaoEspecial == null;
}
@Override
public int hashCode() {
    int result = id != null ? id.hashCode() : 0;
    result = 31 * result + (tipoPessoa != null ? tipoPessoa.hashCode() : 0);
    result = 31 * result + (cgc != null ? cgc.hashCode() : 0);
    result = 31 * result + (razaoSocial != null ? razaoSocial.hashCode() : 0);
    result = 31 * result + (classifricacaoTributaria != null ? classifricacaoTributaria.hashCode() : 0);
    result = 31 * result + (naturezaJuridica != null ? naturezaJuridica.hashCode() : 0);
    result = 31 * result + (indCooperativa != null ? indCooperativa.hashCode() : 0);
    result = 31 * result + (indConstrutora != null ? indConstrutora.hashCode() : 0);
    result = 31 * result + (indDesoneracao != null ? indDesoneracao.hashCode() : 0);
    result = 31 * result + (indRegEletronicoFunc != null ? indRegEletronicoFunc.hashCode() : 0);
    result = 31 * result + (indEntidadeEducativa != null ? indEntidadeEducativa.hashCode() : 0);
    result = 31 * result + (indEmpresaTrabTemporario != null ? indEmpresaTrabTemporario.hashCode() : 0);
    result = 31 * result + (dadosIsencao != null ? dadosIsencao.hashCode() : 0);
    result = 31 * result + (respDpNome != null ? respDpNome.hashCode() : 0);
    result = 31 * result + (respDpCpf != null ? respDpCpf.hashCode() : 0);
    result = 31 * result + (respDpTelefone != null ? respDpTelefone.hashCode() : 0);
    result = 31 * result + (respDpEmail != null ? respDpEmail.hashCode() : 0);
    result = 31 * result + (softwareCnpj != null ? softwareCnpj.hashCode() : 0);
    result = 31 * result + (softwareRazao != null ? softwareRazao.hashCode() : 0);
    result = 31 * result + (softwateNomeContato != null ? softwateNomeContato.hashCode() : 0);
    result = 31 * result + (softwateFoneContato != null ? softwateFoneContato.hashCode() : 0);
    result = 31 * result + (softwareEmailContato != null ? softwareEmailContato.hashCode() : 0);
    result = 31 * result + (situacaoEspecial != null ? situacaoEspecial.hashCode() : 0);
    return result;
}