Boa Noite estou tendo um problema que consiste na seguinte situação, tenho uma class Contato onde o mesmo possui uma lista de Telefones o problema ocorre quando vou realizar uma alteração no Contato e Apago um telefone já cadastrado o sistema excluir da lista porem não exclui do BD quando realizo o Merge encontrei algumas soluções porem não entendi o porque tenho que utilizar dessa forma e se existe alguma forma mais simplificada.
uma das soluções que encontrei foi colocar a Classe Telefone o implements Comparable
e no
public int compareTo(Telefone telefone) {
if(this.getId() != telefone.getId()){
return 1;
}
else {
return 0;
}
}
e quando for gravar antes de realizar o merge realizar o processo abaixo.
Contato contatoGravado = entityManager.find(Contato.class, contato.getId());
List telefonesGravados = contatoGravado.getTelefones();//Recarregar Dados do Banco Custo Alto Para o BD ou Servidor em Alguns casso
List telefonesNovos = contato.getTelefones();//Pegar Lista de Telefones Atualizados no Contato que está sendo Alterado
for (Telefone telefone : telefonesGravados) {
if (!telefonesNovos.contains(telefone)){//Verificar se o Telefone que se encontra no Banco existe na Nova Relação de Telefones
entityManager.remove(entityManager.find(Telefone.class, telefone.getId()));//Excluir Caso o Mesmo não Existe
}
}
Gostaria de entende o Poque tenho que fazer dessa forma e se existem alguma maneira onde apenas passo a lista e o JPA se preucupa em fazer essa Operação de Comparação de objetos.
Pedro E. Braga
MSN: [email removido]
Fone:([telefone removido]