Estou tentando atualizar uma lista dentro da classe produto, consegui realizar isso adicionando cascade=CascadeType.ALL, porém dessa forma ao atualizar a composição é gerado um novo registro no banco.
Exemplo
List<Composicao> lista = criaLista(composicao1, composicao2); //Criando lista com 2 produtos
produtoExemplo.setLista(lista)
adiciona(produto); //Persiste o produto com a composicao no banco de dados
//Momentos depois...
Produto produto = recupera(produtoExemplo);
produto.remove(composicao1);
manager.merge(produto);// Nesse momento é criado novamente no banco de dados a composicao2 e adicionado ao produto, o problema é que vai ficar gerando lixo no banco de dados :(
Classe Produto
@Entity
public class Produto {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nome;
@ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private List<Composicao> composicao;
}
Classe composicao
@Entity
public class Composicao {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@ManyToOne
private Produto produto;
private double quantidade;
}