JPA não exlcui elemento da lista

8 respostas
renanreismartins

pessoal boa tarde.

tenho uma entidade empresa que contem um List, segue abaixo o atributo na classe empresa

@OneToMany(cascade = CascadeType.ALL, mappedBy = "empresa")
private List<Contato> contatos;

em determinado momento faço:

empresa.getContatos().remove(contato);
gerenciador.atualizar(empresa);

a variavel contato é um obj que realmente existe na lista de empresas. Ele sai da lista, porém o jpa nao o exclui do banco. Deveria uma ves que a anotação possui o atributo cascade = CascadeType.ALL.

alguem sabe me explicar pq ?

abraços

8 Respostas

diegosantiviago

como é que o entity manager fica sabendo?

renanreismartins

como assim ? o metodo atualizar executa algo como:

getEm().merge(o);
getEm().flush();

onde o metodo getEm() retorna o entity manager.

abrassss

diegosantiviago

certo, é que não tinha nada ali dizendo como você utiliza o entity manager, inclusive se sua instancia é associada a um contexto de persistencia…

renanreismartins

sim utilizo… tem alguma ideia ?

abrasss

Tchello

Só por curiosidade, a sua entidade sobrescreve equals e hashcode?

Seguinte, você precisa remover o item da lista, remove-lo separadamente do BD e atualizar a lista, veja os passos:

1- Identifica e remove o item da lista
2- remove o item do bd
3- da um merge na entidade que tem a lista

Tive um problema semelhante, procurei no livo Enterprise JavaBeans 3.0 do Bill Burke e dizia pra fazer algo semelhante a isso.

Abraços.

renanreismartins

Tchello valeu amigo, fiz algo semelhante e funcionou. Do modo que estava fazendo nao estava dando certo devido ao lado fraco da relação.

grande abrassss

Tchello

Que bom Renan! Fiquei contente por você!
No problema semelhante que tive as vezes a lista tinha N elementos que deveriam ser removidos, daí usei o método removeAll da interface List (no caso implementado pela ArrayList) pra fazer a diferença da lista antiga com a lista nova…
Abraços!

S

Valeu galera, vou tentar fazer estas alterações,

Abcss t+

:slight_smile:

Criado 23 de julho de 2009
Ultima resposta 24 de ago. de 2009
Respostas 8
Participantes 4