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;
- 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:
- 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
- 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;
}