Ajuda não consigo salva na minha tabela estoque o produto

segue a modelagem de minhas tabelas a cima não estou conseguindo salvar a minha compra no Meu estoque ele cria o ID mas nao ta chegando mais nada la

Esse é meu CompraControlador com metodo salvar

public void salvar() {

    selecionado.setItens(selectedProduto);

    if (selecionado.getId() == null) {

        compraFacade.salvaNovo(selecionado);
    }
    navegarEmbora();
}

public Compra getCompra() {

    return compra;
}

Esse é meu CompraFacade com metodo salvarNovo

public void salvaNovo(Compra selecionado) {

    for (ItemCompra item : selecionado.getItens()) {

        Estoque estoque = estoqueFacade.buscarEstoque(item.getProduto());

        if (estoque == null) {

            estoqueFacade.salvarNovo(estoque);

        } else {
            estoqueFacade.salvar(estoque);
        }
    }
    em.persist(selecionado);
}

e por ultimo o EstoqueFacade com dois metodos que são chamados no CompraFacade

public void salvarNovo(Estoque estoque) {

    estoque = new Estoque();
    estoque.setProduto(estoque.getProduto());
    estoque.setQuantidade(estoque.getQuantidade());
    estoque.setData(estoque.getData());
    em.merge(estoque);

}

public void salvar(Estoque estoque) {

    estoque.setQuantidade(estoque.getQuantidade() + estoque.getQuantidade());
    em.persist(estoque);

}

Não esta reportando nenhum erro tipo NullException?

Nesta linha você está “matando” o estoque recebido por parâmetro.

1 curtida

não está

se eu tirar essa linha da java.lang.NullPointerException

manda o erro do console.

em.merge(estoque);//
não esotu lembrado direito. mas o método merge é pra alterar…
não vi você instânciando o entity manager.
mas tu teria que fazer algo assim…

EntityManagerFactory emf = Persistence.createEntityManagerFactory(“teste”);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(salvarusuario);
em.getTransaction().commit();

	em.close();

nao ta dando errro do modo que o codigo está o problema é esse abaixo quando eu salvo a compra os produtos vendidos não estao sendo gravados no estoque só está criando os ids do estoque

ahhh pow,
então provavelmente o erro está no servlet.
verifique se você está passando os nomes do componente correto no seu servlet.

a tabela compra e itemcompra esta sendo povoada somente a estoque não

olhou o seu servlet?
posta o código do servlet e da pagina onde vc cadastra essas informações.

A pagina de cadastro compra :

<?xml version='1.0' encoding='UTF-8' ?>
            <p:panel header="Informações sobre a compra">
            <p:panelGrid columns="4" styleClass="mrig05" style="align-items: baseline">
                <h:outputText value="Codigo da Compra"/>
                <h:inputText value="#{compraControlador.selecionado.cod}"/>
                <h:outputText value="Data da Compra"/>
                <p:calendar   value="#{compraControlador.selecionado.data}" pattern="dd-MM-yyyy" mask="true"/>
                <h:outputText value="Descrição da compra"/>
                <h:inputTextarea value="#{compraControlador.selecionado.descricao}"/>
            </p:panelGrid>
            </p:panel>

            <p:fieldset id="availablProdutoField" legend="Produtos Disponiveis">
                <p:dataTable id="availableProdutos" var="prod" value="#{compraControlador.produtos}">
                    <p:column style="width:40px">
                        <h:outputText id="dragIcon" styleClass="ui-icon ui-icon-arrow-4"/>
                        <p:draggable for="dragIcon" revert="true" helper="clone"/>
                    </p:column>

                    <p:column headerText="Id">
                        <h:outputText value="#{prod.produto.id}"/>
                    </p:column>

                    <p:column headerText="Produto">
                        <h:outputText value="#{prod.produto.descricao}"/>
                    </p:column>

                    <p:column headerText="Preço">
                        <h:outputText value="#{prod.produto.preco}"/>
                    </p:column>

                </p:dataTable>

            </p:fieldset>

            <p:fieldset id="selectedProdutos" legend="Produtos Selecionados" style="margin-top:20px">
                <p:outputPanel id="dropArea" >
                    <h:outputText value="!!!Solte aqui os Produtos!!!"
                                  rendered="#{empty compraControlador.selectedProduto}"
                                  style="font-size:24px;"/>
                    <p:dataTable id="selectedProdutoTable" var="prod" value="#{compraControlador.selectedProduto}"
                                 rendered="#{not empty compraControlador.selectedProduto}"
                                 styleClass="mrig05" style="margin-bottom: 10px">

                        <p:column headerText="Id">
                            <h:outputText value="#{prod.produto.id}"/>
                        </p:column>

                        <p:column headerText="Produto">
                            <h:outputText value="#{prod.produto.descricao}"/>
                        </p:column>

                        <p:column headerText="Preço">
                            <h:outputText value="#{prod.produto.preco}"/>
                        </p:column>

                        <p:column style="width:150px" headerText="Qtd.">
                            <p:inputText value="#{prod.quantidade}">
                                <p:ajax event="blur" process="@this"/>
                            </p:inputText>
                        </p:column>

                    </p:dataTable>
                </p:outputPanel>
            </p:fieldset>

            <p:commandButton value="salva" actionListener="#{compraControlador.salvar}"
                             onclick="PF('statusDialog').show();"
                             oncomplete="PF('statusDialog').hide()"
                             icon="ui-icon-disk" styleClass="mrig05">

            </p:commandButton>

            <p:button value="Cancelar"
                      icon="ui-icon-arrow"
                      href="/admin/compra/listar/" styleClass="mrig05"/>
        </p:panel>

        <p:droppable for="selectedProdutos" tolerance="touch" activeStyleClass="ui-state-highlight"
                     datasource="availableProdutos" onDrop="handleDrop">
            <p:ajax listener="#{compraControlador.onProdutoDrop}" update="dropArea availableProdutos"/>
        </p:droppable>
    </h:form>
</ui:define>

</ui:composition>

FacadeCompra = Servelet

package br.com.romaninisistemas.negocio;

import br.com.romaninisistemas.entidade.Compra;
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.ItemCompra;
import br.com.romaninisistemas.supers.AbstractFacade;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.Date;

/**

  • Created by fonseca on 12/8/17.
    */
    @Repository
    @Transactional
    public class CompraFacade extends AbstractFacade {

    @PersistenceContext
    private EntityManager em;
    private Compra compra;
    @Autowired
    private EstoqueFacade estoqueFacade;

    public CompraFacade() {

     super(Compra.class);
    

    }

    @Override
    public EntityManager getEntityManager() {

     return em;
    

    }

    public void salvaNovo(Compra selecionado) {

     for (ItemCompra item : selecionado.getItens()) {
    
         Estoque estoque = estoqueFacade.buscarEstoque(item.getProduto());
    
         if (estoque == null) {
    
             estoqueFacade.salvarNovo(estoque);
    
         } else {
             estoqueFacade.salvar(estoque);
         }
     }
     em.persist(selecionado);
    

    }

    public void setCompra(Compra compra) {
    this.compra = compra;
    }

    public Compra getCompra() {
    return compra;
    }

    public void setEstoqueFacade(EstoqueFacade estoqueFacade) {
    this.estoqueFacade = estoqueFacade;
    }
    }

Controlador Bean compra

package br.com.romaninisistemas.controlador;

/**

  • Created by fonseca on 12/8/17.
    */

import br.com.romaninisistemas.entidade.Compra;
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.ItemCompra;
import br.com.romaninisistemas.entidade.Produto;
import br.com.romaninisistemas.negocio.CompraFacade;
import br.com.romaninisistemas.negocio.EstoqueFacade;
import br.com.romaninisistemas.negocio.ItemCompraFacade;
import br.com.romaninisistemas.negocio.ProdutoFacade;
import br.com.romaninisistemas.supers.AbstractControlador;
import br.com.romaninisistemas.supers.AbstractFacade;
import br.com.romaninisistemas.util.FacesContextUtil;
import com.google.common.collect.Lists;
import com.ocpsoft.pretty.faces.annotation.URLAction;
import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;
import org.primefaces.event.DragDropEvent;
import org.springframework.beans.factory.annotation.Autowired;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@ManagedBean
@ViewScoped
@URLMappings(mappings = {
@URLMapping(id = “novo-compras”, pattern = “/admin/compra/novo/”, viewId = “/faces/admin/cadastros/compra/editar.xhtml”)

})
public class CompraControlador extends AbstractControlador {

@Autowired
private CompraFacade compraFacade;
@Autowired
private ProdutoFacade produtoFacade;

@Autowired
private EstoqueFacade estoqueFacade;

private ItemCompra itemCompra;
private Compra compra;
private List<ItemCompra> selectedProduto;
private List<ItemCompra> produtos;
private Estoque estoque;


@Override
public AbstractFacade getFacade() {

    return compraFacade;
}

public CompraControlador() {

    super(Compra.class);
}

@URLAction(mappingId = "novo-compras", phaseId = URLAction.PhaseId.RENDER_RESPONSE, onPostback = false)
public void novo() {
    super.novo();
    selectedProduto = new ArrayList<ItemCompra>();
    produtos = getTodosProdutos();

}

public void onProdutoDrop(DragDropEvent ddEvent) {
    ItemCompra produto = ((ItemCompra) ddEvent.getData());
    selectedProduto.add(produto);
    produtos.remove(produto);
}

public List<ItemCompra> getTodosProdutos() {
    List<Produto> produtos = produtoFacade.listar();
    List<ItemCompra> itens = Lists.newArrayList();
    for (Produto produto : produtos) {
        itens.add(new ItemCompra(selecionado, produto));
    }
    return itens;
}


public void salvar() {

    selecionado.setItens(selectedProduto);

    if (selecionado.getId() == null) {

        compraFacade.salvaNovo(selecionado);
    }
    navegarEmbora();
}

public Compra getCompra() {

    return compra;
}



public void setCompra(Compra compra) {

    this.compra = compra;
}

public List<ItemCompra> getSelectedProduto() {

    return selectedProduto;
}

public List<ItemCompra> getProdutos() {

    return produtos;
}

public ItemCompra getItemCompra() {
    return itemCompra;
}

public void setItemCompra(ItemCompra itemCompra) {
    this.itemCompra = itemCompra;
}

public Estoque getEstoque() {
    return estoque;
}

public void setEstoque(Estoque estoque) {
    this.estoque = estoque;
}

public EstoqueFacade getEstoqueFacade() {
    return estoqueFacade;
}

public void setEstoqueFacade(EstoqueFacade estoqueFacade) {
    this.estoqueFacade = estoqueFacade;
}

}

FacadeEstoque

package br.com.romaninisistemas.negocio;

import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.entidade.Produto;
import br.com.romaninisistemas.exceptions.ExcecaoNegocioGenerica;
import br.com.romaninisistemas.supers.AbstractFacade;
import com.google.common.collect.Lists;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.Date;
import java.util.List;

/**

  • Created by fonseca on 12/4/17.
    */
    @Repository
    @Transactional
    public class EstoqueFacade extends AbstractFacade {

    @PersistenceContext
    private EntityManager em;

    Estoque estoque;

    public EstoqueFacade() {
    super(Estoque.class);
    }

    @Override
    public EntityManager getEntityManager() {
    return em;
    }

    public List getallEstoque() {
    String sql = "Select estoq.* from Estoque estoq order by 1 ";
    Query q = em.createNativeQuery(sql, Estoque.class);

     try {
         return q.getResultList();
     } catch (NoResultException nre) {
         return Lists.newArrayList();
     } catch (Exception ex) {
         ex.printStackTrace();
     }
     return Lists.newArrayList();
    

    }

    public void deletar(Estoque selecionado) {

     em.remove(em.find(Estoque.class, selecionado.getId()));
    

    }

    public void salvarNovo(Estoque estoque) {

     estoque = new Estoque();
     estoque.setProduto(estoque.getProduto());
     estoque.setQuantidade(estoque.getQuantidade());
     estoque.setData(estoque.getData());
     em.persist(estoque);
    

    }

    public void salvar(Estoque estoque) {

     estoque.setQuantidade(estoque.getQuantidade() + estoque.getQuantidade());
     em.merge(estoque);
    

    }

    public Estoque buscarEstoque(final Produto produto) {

     String sql = "select t from estoque t where t.produto_id = :produto ";
    
     Query q = em.createNativeQuery(sql, Estoque.class);
     q.setParameter("produto", produto.getId());
     q.setMaxResults(1);
    
     try {
         return (Estoque) q.getSingleResult();
     } catch (NoResultException nre) {
         return null;
     }
    

    }

    /**

    • Para pegar o id do estoque

    • @Id
      */
      public Estoque buscarEstoquePorId(Estoque id) {

      String sql = "select t from Estoque t where t.id = :id ";
      Query q = em.createNativeQuery(sql, Estoque.class);
      q.setParameter(“id”, id);
      q.setMaxResults(1);

      try {
      return (Estoque) q.getSingleResult();
      } catch (NoResultException nre) {
      return null;
      }
      }
      }

Você tem valores padrão para produto , quantidade e data?

Se todos eles forem vazio seu banco vai salvar vazio mesmo.

Pq quando você faz

estoque = new Estoque(); 
estoque.setProduto(estoque.getProduto()); //Faz sentido? Acho que não, já que como o @staroski disse, voce mata o estoque recebido como padrão.  
estoque.setQuantidade(estoque.getQuantidade());
estoque.setData(estoque.getData());

Mas faz o seguinte teste.

estoque = new Estoque(); 
estoque.setProduto("Produto teste");
estoque.setQuantidade(10);
estoque.setData(new Date());

Ve se vai salvar… Se salvar, você sabe onde ta o erro.

1 curtida

é porque é um objeto carregando varios produtos nao se você viu minha tela lá é um drag drop

Fiquei meio confuso, porque no ato da venda você está criando um novo estoque?
Isso não deveria ser feito quando você cadastra o produto e na venda você só atualiza a quantidade disponível desse produto, subtraindo da quantidade existente a quantidade vendida?

1 curtida

mas se eu tirar da nullpoint é compra mano ainda nao fiz a venda

Será então que o seu SalvarNovo não deveria receber o Produto ao inves do Estoque?

Aí faria sentido você dar um new Estoque no metodo salvarNovo.

1 curtida

dentro do salvarNovo da compra chamo o metodo salvarnovo do estoque eu tirei o new Estoque olha o que da

Aí vai dar exception mesmo… Pois vc so chama o salvarNovo se o seu estoque for null…

Ainda acho que você queria passar o Produto para criar um novo estoque deste produto.

1 curtida

Desculpe, associei a compra com o ato do usuario comprar o produto já, que nesse caso é a venda.

Troque no seu codigo, depois dele buscar por algo assim:
if (estoque == null) {
Estoque estoque = new Estoque();
estoque.setProduto(item.getProduto());
estoque.setCompra(item.getCompra());
estoque.setQuantidade(item.getQuantidade());
estoqueFacade.salvarNovo(estoque);

Do jeito que vc ta passando, se ele não acha no estoque (null) ele manda um estoque vazio pra ser salvo.

1 curtida

nossa mano valeu ajudou demais resolveu meu problema

1 curtida