Olá galera, estou com um probleminha.
Não estou conseguindo remover um item de uma List e salvar a nova list com o item removido no banco,.
O curioso, é que para adicionar um elemento na List e salvar no banco, nao ocorre nenhum problema.
Vamos aos códigos que fica mais facil de entender o problema.
public void deletaItem(){
FacesContext context = FacesContext.getCurrentInstance();
DAO<PedidoCompra> dao = new DAO<PedidoCompra>(PedidoCompra.class);
System.out.println(pedido.getItens().remove(itemSelecionado));
dao.atualiza(pedido);
for(ItemCompra i: pedido.getItens()){
System.out.println("MEMORIA>>>>>>>>>> "+i.getProduto().getDescricao());
}
for(ItemCompra i : getListaItensPedido()){
System.out.println("BANCO>>>>>> "+i.getProduto().getDescricao());
}
context.addMessage(null, new FacesMessage("Item removido!"));
}
for
E o curioso, é que usando um método que adiciona novos itens a lista, práticamente da mesma forma, as alterações no banco são realizadas.
public void adicionaItem() {
FacesContext context = FacesContext.getCurrentInstance();
ItemCompra item = new ItemCompra();
DAO<Produto> dao = new DAO<Produto>(Produto.class);
Produto p = dao.BuscaPorId(idProduto);
item.setPedido(pedido);
item.setProduto(p);
item.setQuantidade(quantidade);
item.setValorUnitario(valorUnitario);
item.setTotal(quantidade * valorUnitario);
pedido.getItens().add(item);
DAO<PedidoCompra> daoPedido = new D/AO<PedidoCompra>(PedidoCompra.class);
daoPedido.atualiza(pedido);
context.addMessage(null, new FacesMessage(
"Item adicionado ao Pedido n " + pedido.getId()));
}
package com.perfaco.mb;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.primefaces.event.SelectEvent;
import com.perfaco.dao.DAO;
import com.perfaco.dao.JPAUtil;
import com.perfaco.modelo.ItemCompra;
import com.perfaco.modelo.PedidoCompra;
import com.perfaco.modelo.Produto;
@ManagedBean
@ViewScoped
public class EditarPedidoCompra implements Serializable {
private PedidoCompra pedido;
private ItemCompra itemSelecionado;
private Long idProduto;
private Produto produto;
private int quantidade;
private double valorUnitario;
public List<ItemCompra> getListaItensPedido() {
EntityManager em = new JPAUtil().getEntityManager();
Query q = em
.createQuery("SELECT i FROM ItemCompra i WHERE i.pedido = :p");
q.setParameter("p", pedido);
return q.getResultList();
}
public void editaItem() {
FacesContext context = FacesContext.getCurrentInstance();
if (this.itemSelecionado == null) {
context.addMessage(null, new FacesMessage("Houve um Erro"));
} else {
DAO<ItemCompra> dao = new DAO<ItemCompra>(ItemCompra.class);
DAO<Produto> daoProduto = new DAO<Produto>(Produto.class);
this.produto = daoProduto.BuscaPorId(idProduto);
this.itemSelecionado.setProduto(produto);
this.itemSelecionado.setTotal(getCalculaTotal());
dao.atualiza(itemSelecionado);
context.addMessage(null,
new FacesMessage("Pedido n " + pedido.getId()
+ " editado com sucesso"));
}
}
public void adicionaItem() {
FacesContext context = FacesContext.getCurrentInstance();
ItemCompra item = new ItemCompra();
DAO<Produto> dao = new DAO<Produto>(Produto.class);
Produto p = dao.BuscaPorId(idProduto);
item.setPedido(pedido);
item.setProduto(p);
item.setQuantidade(quantidade);
item.setValorUnitario(valorUnitario);
item.setTotal(quantidade * valorUnitario);
pedido.getItens().add(item);
DAO<PedidoCompra> daoPedido = new DAO<PedidoCompra>(PedidoCompra.class);
daoPedido.atualiza(pedido);
context.addMessage(null, new FacesMessage(
"Item adicionado ao Pedido n " + pedido.getId()));
}
public void deletaItem(){
FacesContext context = FacesContext.getCurrentInstance();
DAO<PedidoCompra> dao = new DAO<PedidoCompra>(PedidoCompra.class);
System.out.println(pedido.getItens().remove(itemSelecionado));//AQUI APARECE TRUE
dao.atualiza(pedido);
for(ItemCompra i: pedido.getItens()){
System.out.println("MEMORIA>>>>>>>>>> "+i.getProduto().getDescricao());//AQUI MOSTRA A LISTA SEM O ITEM REMOVIDO
}
for(ItemCompra i : getListaItensPedido()){
System.out.println("BANCO>>>>>> "+i.getProduto().getDescricao());// AQUI, O ITEM REMOVIDO APARECE. ESTE MÉTODO BUSCA DIRETO DO BANCO
}
context.addMessage(null, new FacesMessage("Item removido!"));
}
Gostaria que vcs me ajudassem com + esse probleminha =).
E se tiverem sugestões melhores, tambem serão todas muito bem vindas!
Obrigado