Dar baixa no estoque Java EE, com hibernete

7 respostas Resolvido
J

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

7 Respostas

J

Sua dúvida está muito genérica, seja mais específico tecnicamente.

Sabe ler e gravar registro no banco? Se souber, no geral, le do banco, diminui a quantidade e salva. Se nao souber, pesquisa sobre como localizar e atualizar registro no banco com JPA/Hibernate.

V
Solucao aceita

Você precisa fazer algo parecido com isto para fazer a atualização do registro:

public boolean atualizaEstoque(Long id_produto, Integer quantidade) {
    try {
        //busca o produto no banco
        DAO<Produto> dao = new DAO(Produto.class);
        Produto produto = dao.buscaPorld(id_produto);
        //atualiza a quantidade
        int nova_quantidade = produto.getQuantidade() - quantidade;
        produto.setQuantidade(nova_quantidade);
        //atualiza produto no banco de dados
        dao.atualiza(produto);
        //retorna verdadeiro se o produto foi atualizado com êxito
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        //retorna falso se deu algo errado e produto não foi atualizado
        return false;
    }
}

Automaticamente você pode conseguir utilizando algum framework (eu não conheço nenhum), porém será exatamente isto que ele vai fazer. Pesquisa no banco, atualiza, salva no banco e verifica o retorno.

Espero que tenha ajudado.

J

obrigado pelo retorno irei tentar aqui

J

Ja estou pesquisando, obrigado pelo retorno

J

Parece que sua solução vai me atender bem

J

Deu certo, fiz algumas modificações mais é isso ai mesmo, valeu cara

V

É isso ai, fazer modificações em códigos de terceiros geralmente é o que faz absorver mais conhecimento do que simplesmente copiar e colar. Que bom que o post te ajudou. :smiley:

Criado 24 de dezembro de 2018
Ultima resposta 27 de dez. de 2018
Respostas 7
Participantes 3