Estou com um problema na consigo adicionar os itens da baixa a lista de itens entregues porem, não consigo diminuir o estoque.
Minha classe DAO
package com.controleestoque.dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;
public class DAO<T> {
private final Class<T> classe;
public DAO(Class<T> classe) {
this.classe = classe;
}
public void adiciona(T t) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
em.persist(t);
em.getTransaction().commit();
em.close();
}
public void remove(T t) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
em.remove(em.merge(t));
em.getTransaction().commit();
em.close();
}
public void atualiza(T t) {
EntityManager em = new JPAUtil().getEntityManager();
em.getTransaction().begin();
em.merge(t);
em.getTransaction().commit();
em.close();
}
public List<T> listaTodos() {
EntityManager em = new JPAUtil().getEntityManager();
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
query.select(query.from(classe));
List<T> lista = em.createQuery(query).getResultList();
em.close();
return lista;
}
public T buscaPorld(Long id) {
EntityManager em = new JPAUtil().getEntityManager();
return (T) em.find(classe, id);
}
}
Classe Produto.
package com.controleestoque.modelo;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import org.hibernate.annotations.Cascade;
@Entity
public class Produto {
@Id
@SequenceGenerator(name = "produto_id", sequenceName = "produto_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "produto_id")
private Long id;
private String nome;
private String descricao;
private String lote;
private int quantidade;
private String localizacao;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "produto")
private List<Item> itens = new ArrayList<>();
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getLocalizacao() {
return localizacao;
}
public void setLocalizacao(String localizacao) {
this.localizacao = localizacao;
}
public String getLote() {
return lote;
}
public void setLote(String lote) {
this.lote = lote;
}
public List<Item> getItens() {
return itens;
}
public void setItens(List<Item> itens) {
this.itens = itens;
}
}
Classe ProdutoBean
package com.controleestoque.modelo;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import org.hibernate.annotations.Cascade;
@Entity
public class Produto {
@Id
@SequenceGenerator(name = "produto_id", sequenceName = "produto_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "produto_id")
private Long id;
private String nome;
private String descricao;
private String lote;
private int quantidade;
private String localizacao;
@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "produto")
private List<Item> itens = new ArrayList<>();
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getLocalizacao() {
return localizacao;
}
public void setLocalizacao(String localizacao) {
this.localizacao = localizacao;
}
public String getLote() {
return lote;
}
public void setLote(String lote) {
this.lote = lote;
}
public List<Item> getItens() {
return itens;
}
public void setItens(List<Item> itens) {
this.itens = itens;
}
}
Entrega
package com.controleestoque.modelo;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Entrega {
@Id
@SequenceGenerator(name = "entrega_id", sequenceName = "entrega_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entrega_id")
private Long id;
@Temporal(TemporalType.DATE)
private Calendar data = Calendar.getInstance();
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="entrega")
private List<Item> itens = new ArrayList<Item>();
// getters / setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
public List<Item> getItens() {
return itens;
}
public void setItens(List<Item> itens) {
this.itens = itens;
}
}
EntregaBean
package com.controleestoque.mb;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.controleestoque.dao.DAO;
import com.controleestoque.modelo.Entrega;
import com.controleestoque.modelo.Funcionario;
import com.controleestoque.modelo.Item;
import com.controleestoque.modelo.Produto;
@ManagedBean
@ViewScoped
public class EntregaBean implements Serializable {
private Entrega entrega = new Entrega();
private Item item = new Item();
private Long idProduto;
private Long idFuncionario;
private List<Entrega> entregas = new ArrayList<>();
public void guardaItemProduto() {
DAO<Produto> dao = new DAO<Produto>(Produto.class);
Produto produto = dao.buscaPorld(idProduto);
item.setProduto(produto);
entrega.getItens().add(item);
item.setEntrega(entrega);
item = new Item();
guardaItemFuncionario();
}
public void grava() {
DAO<Entrega> dao = new DAO<Entrega>(Entrega.class);
if (entrega.getId() == null) {
dao.adiciona(entrega);
} else {
dao.atualiza(entrega);
}
this.entrega = new Entrega();
this.entregas = dao.listaTodos();
}
public void remove(Entrega entrega) {
DAO<Entrega> dao = new DAO<Entrega>(Entrega.class);
dao.remove(entrega);
this.entregas = dao.listaTodos();
}
public void cancela() {
this.entrega = new Entrega();
}
public Entrega getEntrega() {
return entrega;
}
public void setEntrega(Entrega entrega) {
this.entrega = entrega;
}
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public Long getIdProduto() {
return idProduto;
}
public void setIdProduto(Long idProduto) {
this.idProduto = idProduto;
}
public Long getIdFuncionario() {
return idFuncionario;
}
public void setIdFuncionario(Long idFuncionario) {
this.idFuncionario = idFuncionario;
}
public List<Entrega> getEntregas() {
DAO<Entrega> dao = new DAO<>(Entrega.class);
this.entregas = dao.listaTodos();
return entregas;
}
}
Classe item
package com.controleestoque.modelo;
import java.util.Calendar;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Item {
@Id
@SequenceGenerator(name = "item_id", sequenceName = "item_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "item_id")
private Long id;
@ManyToOne
private Produto produto;
@ManyToOne
private Funcionario funcionario;
@ManyToOne
private Entrega entrega;
@Temporal(TemporalType.DATE)
private Calendar data = Calendar.getInstance();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public Entrega getEntrega() {
return entrega;
}
public void setEntrega(Entrega entrega) {
this.entrega = entrega;
}
public Calendar getData() {
return data;
}
public void setData(Calendar data) {
this.data = data;
}
}
Meu problema é o seguinte consigo salvar o produto, adicionar o produto ao itens e salvar a entrega e listalas no item.
queria que ao guardar Item ou ao gravar diminuisse uma unidade do estoque, ja tentei criar varios metodos não da erro mais não diminui. desde já agradeço tenha um Feliz natal
