Pedido.java
@ManyToOne
@JoinColumn(name = "ped_cod_cliente_ped")
private Cliente cliente;
@ManyToOne
@JoinColumn(name = "ped_cod_vendedor_ped")
private Vendedor vendedor;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "item_pedido")
private List<ItemPedido> itemPedido;
@JoinColumn(name = "ped_total_ped")
private double total;
ItemPedido.java
@OneToOne
@JoinColumn(name = "item_cod_produto_item")
private Produto produto;
@JoinColumn(name = "item_preco_item")
private double preco;
@JoinColumn(name = "item_quantidade_item")
private Long quantidade;
DAOGenerico.java
public final Entidade alterar(Entidade objeto) {
EntityTransaction tx = getEntityManager().getTransaction();
try {
tx.begin();
objeto = getEntityManager().merge(objeto);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
if (tx != null && tx.isActive()) {
tx.rollback();
}
}
return objeto;
}
MBPedidoEdit.java
public String atualizarPedido() {
pedido.setCliente(cliente);
pedido.setVendedor(vendedor);
daoPedido.alterar(pedido);
instanciaObjetos();
return "";
}
Todos eles estendem de BaseEntity.java(exceto as classes DAOGenerico.java e MBPedidoEdit.java), classe base que possui apenas um atributo: codigo.
O problema é o seguinte, sempre que eu faço um Pedido com 4 itens por exemplo, todos os 4 itens são inseridos normalmente na tabela ItemPedido. Mas quando vou para a página editarPedido e removo o 1º e o 2º item, restando apenas o 3º e o 4º e faço o update, na tabela ItemPedido os itens 3 e 4 continuam persistidos e associados ao Pedido, mas os itens 1 e 2 ficam NULL na coluna onde deveria estar o ID do pedido, ou seja, restando lixo na tabela.
Em poucas palavras, quando faço o update os itens retirados do pedido continuam no banco(só que setados como nulo), poluindo a tabela.
