JPA Problema ao atualizar objeto (não remove itens de lista)

5 respostas
FredMP

Bom dia a todos! Estamos começando a usar a JPA (TopLink) aqui na empresa e estamos enfrentando algumas dificuldades. Por exemplo, ao atualizar (MERGE) um objeto (com cascade EAGER) que contém uma lista com 10 itens, do qual foram removidos 2 desses itens a JPA não os remove do banco, já tentamos várias alternativas nas configurações e nada! Alguém sabe dizer se será preciso remover item a item ou se existe alguma alternativa pra esse caso?

A gente já tentou usar com mappedBy (bidirecional): ele removia a ligação na tabela intermediária mas não removia o item
E tb tentamos sem o mappedBy (unidirecional), nesse caso ele não removeu nada ao atualizar!

@OneToMany(mappedBy = "movimentacao", cascade = CascadeType.ALL, targetEntity = Item.class) private List<T> itens = new ArrayList<T>();
e

@ManyToOne private MovimentacaoProduto movimentacao;

Att,
Fred

5 Respostas

J

Estou passando pelo mesmo problema. Já conseguiu resolver?

FredMP

Pior que não… o que fizemos aqui foi remover item por item mesmo. Acho que ainda faltam alguns detalhes pra JPA ficar redonda, talvez quem sabe na próxima versão…

toni.arc

FredMP:
Bom dia a todos! Estamos começando a usar a JPA (TopLink) aqui na empresa e estamos enfrentando algumas dificuldades. Por exemplo, ao atualizar (MERGE) um objeto (com cascade EAGER) que contém uma lista com 10 itens, do qual foram removidos 2 desses itens a JPA não os remove do banco, já tentamos várias alternativas nas configurações e nada! Alguém sabe dizer se será preciso remover item a item ou se existe alguma alternativa pra esse caso?

A gente já tentou usar com mappedBy (bidirecional): ele removia a ligação na tabela intermediária mas não removia o item
E tb tentamos sem o mappedBy (unidirecional), nesse caso ele não removeu nada ao atualizar!

@OneToMany(mappedBy = "movimentacao", cascade = CascadeType.ALL, targetEntity = Item.class) private List<T> itens = new ArrayList<T>();
e

@ManyToOne private MovimentacaoProduto movimentacao;

Att,
Fred

é porque ta faltando a anotação @JoinColumn no objeto movimentacao, faça assim:

@ManyToOne @JoinColumn(name="itens") private MovimentacaoProduto movimentacao;

FredMP

Vou testar amanhã ao chegar no trabalho. Obrigado toni.arc!

rcsilva83

Olá,

Esta thread já é antiga, mas cheguei a ela por ter encontrado o mesmo problema. Pelo que li, este comportamento é reamente o esperado. Eu resolvi isso através do “DELETE_ORPHANS” do Hibernate (que eu uso como implementação do JPA).

Quando a JPA contemplar o “delete orphans”, será possível fazer sem o Hibernate (acho que a nova especificação, que vai entrar no JEE 6, já contempla isso).

Abraço!

Criado 27 de agosto de 2007
Ultima resposta 21 de out. de 2009
Respostas 5
Participantes 4