13
respostas

Erro com salvar itens da venda

Boa tarde, ontem conversando com o Fernando o instrutor aqui da alura, ele me tiro dúvidas em uso de cascade, mais e sem o uso do cascade como que faz para adicionar um atribudo que tem 2 fk? porque estou querendo salvar o item no banco e não aceita de jeito nenhum o hibernate me acusa erro, quando não acusa me fala do atributo null.

@Entity
@SuppressWarnings("serial")
public class Item implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private Integer quantidade;
    private BigDecimal valorParcial = BigDecimal.valueOf(0.0D);
    @ManyToOne
    @JoinColumn(name = "produto_codigo")
    private Produto produto = new Produto();
    @ManyToOne
    @JoinColumn(name = "venda_codigo")
    private Venda venda = new Venda();
@Entity
@SuppressWarnings("serial")
public class Venda implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @Temporal(TemporalType.TIMESTAMP)
    private Calendar horario = Calendar.getInstance();
    private BigDecimal valorTotal = BigDecimal.valueOf(0.0D);
    @ManyToOne
    @JoinColumn(name = "funcionario_codigo")
    private Funcionario funcionario = new Funcionario();
    @OneToMany(mappedBy = "venda")
    private List<Item> itens = new ArrayList<Item>();

Quando faço o meu código para salvar desse jeito.

@Transacao
    public void salvar() {
        if (venda.getCodigo() == null) {
            Funcionario buscarPorId = funcionarioDao.buscarPorId(venda.getFuncionario().getCodigo());
            venda.setFuncionario(buscarPorId);
            vendaDao.salvar(venda);

            mensagem.mensagem("Venda efetuada com sucesso");
        } else {

        }
        this.venda = new Venda();
        this.itens = new ArrayList<Item>();
    }

Ocorre tudo perfeito, porém queria salvar os meus itens também e não só a venda. Agora quando vo adiconar minha venda assim sem passar a referecia do produto, me retorna o erro.

@Transacao
    public void salvar() {
        if (venda.getCodigo() == null) {
            Funcionario buscarPorId = funcionarioDao.buscarPorId(venda.getFuncionario().getCodigo());
            venda.setFuncionario(buscarPorId);
            vendaDao.salvar(venda);
            itemDao.salvar(item);
            mensagem.mensagem("Venda efetuada com sucesso");
        } else {

        }
        this.venda = new Venda();
        this.itens = new ArrayList<Item>();
    }
fev 01, 2017 6:22:41 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: javax.persistence.RollbackException: Error while committing the transaction
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:92)
    at br.com.bercalini.gerenciamento.Gerenciamento.gerenciarTransacoes(Gerenciamento.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68)
    at br.com.bercalini.bean.VendaBean$Proxy$_$$_WeldSubclass.salvar(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: br.com.bercalini.modelo.Item.produto -> br.com.bercalini.modelo.Produto
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1374)
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:80)
    ... 51 more
Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing: br.com.bercalini.modelo.Item.produto -> br.com.bercalini.modelo.Produto
    at org.hibernate.engine.spi.CascadingAction$8.noCascade(CascadingAction.java:380)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:176)
    at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:160)
    at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:151)
    at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1213)
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:402)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:175)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:75)
    ... 51 more

Porém quando faço a minha referencia.

@Transacao
    public void salvar() {
        if (venda.getCodigo() == null) {
            Funcionario buscarPorId = funcionarioDao.buscarPorId(venda.getFuncionario().getCodigo());
            venda.setFuncionario(buscarPorId);
            vendaDao.salvar(venda);
            Produto buscarPorId2 = produtoDao.buscarPorId(item.getProduto().getCodigo());
            item.setProduto(buscarPorId2);
            itemDao.salvar(item);
            mensagem.mensagem("Venda efetuada com sucesso");
        } else {

        }
        this.venda = new Venda();
        this.itens = new ArrayList<Item>();
    }

O erro do null, mais sinceramente não to entendendo o erro null

ADVERTÊNCIA: java.lang.IllegalArgumentException: id to load is required for loading
javax.el.ELException: java.lang.IllegalArgumentException: id to load is required for loading
    at org.apache.el.parser.AstValue.invoke(AstValue.java:260)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: id to load is required for loading
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:87)
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:59)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2421)
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:974)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:807)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
    at org.jboss.weldx.persistence.EntityManager$196817612$Proxy$_$$_WeldClientProxy.find(Unknown Source)
    at br.com.bercalini.dao.ProdutoDao.buscarPorId(ProdutoDao.java:41)
    at br.com.bercalini.bean.VendaBean.salvar(VendaBean.java:51)
    at br.com.bercalini.bean.VendaBean$Proxy$_$$_WeldSubclass.salvar$$super(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:49)
    at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:77)
    at br.com.bercalini.gerenciamento.Gerenciamento.gerenciarTransacoes(Gerenciamento.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68)
    at br.com.bercalini.bean.VendaBean$Proxy$_$$_WeldSubclass.salvar(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    ... 34 more
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<ui:composition template="/template/template.xhtml">
    <ui:define name="conteudo">
        <div class="ui-fluid">

            <h:form id="formularioVenda">
                <p:growl id="mensagem" showDetail="true" sticky="true" />
                <p:dataTable id="tabelaVenda" paginator="true" rows="3"
                    emptyMessage="Nenhum produto encontrado" var="produto"
                    value="#{vendaBean.listaProdutos}">

                    <f:facet name="header">
                    Tabela de produtos
                </f:facet>

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

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

                    <p:column headerText="Quantidade">
                        <h:outputText value="#{produto.quantidade}" />
                    </p:column>

                    <p:column headerText="Fornecedor">
                        <h:outputText value="#{produto.fornecedor.nome}" />
                    </p:column>

                    <p:column headerText="Adicionar Item">
                        <p:commandButton value="Adicionar"
                            actionListener="#{vendaBean.adicionarProduto(produto)}"
                            update=":formularioVenda:tblItens :formularioVenda:painelVenda" />
                    </p:column>

                </p:dataTable>

                <p:separator />


                <p:dataTable id="tblItens" paginator="true" rows="3"
                    emptyMessage="Nenhum item encontrado" var="item"
                    value="#{vendaBean.itens}">

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

                    <p:column headerText="Quantidade">
                        <h:outputText value="#{item.quantidade}" />
                    </p:column>

                    <p:column headerText="Valor Parcial">
                        <h:outputText value="#{item.valorParcial}" />
                    </p:column>

                    <p:column headerText="Fornecedor">
                        <h:outputText value="#{item.produto.fornecedor.nome}" />
                    </p:column>

                    <p:column headerText="Remover Item">
                        <p:commandButton value="Remover"
                            actionListener="#{vendaBean.remover(item)}"
                            update=":formularioVenda:tblItens :formularioVenda:painelVenda" />
                    </p:column>

                </p:dataTable>

                <h:panelGrid columns="3" id="painelVenda">

                    <p:outputLabel value="Valor total: " for="valor" />
                    <p:inputText id="valor" value="#{vendaBean.venda.valorTotal}"
                        readonly="true" size="11" />

                    <p:commandButton value="Finalizar venda"
                        actionListener="#{vendaBean.carregarDadosVenda}"
                        oncomplete="PF('finalizar').show();"
                        update=":formularioVenda :dialog" />

                </h:panelGrid>
            </h:form>

            <p:dialog id="dialog" appendTo="@(body)" header="Finalizar venda"
                closable="true" modal="true" resizable="false" draggable="false"
                widgetVar="finalizar">
                <h:form>
                    <h:panelGrid columns="2">
                        <p:outputLabel value="Data: " />
                        <p:inputText readonly="true"
                            value="#{vendaBean.venda.horario.time}">
                            <f:convertDateTime pattern="dd/MM/yyyy"
                                timeZone="America/Sao_Paulo" />
                        </p:inputText>

                        <p:outputLabel value="Funcionario: " />
                        <p:inputText readonly="true"
                            value="#{vendaBean.venda.funcionario.nome}" />

                        <p:outputLabel value="Valor total: " />
                        <p:inputText readonly="true" value="#{vendaBean.venda.valorTotal}" />
                        <p:commandButton value="Finalizar"
                            actionListener="#{vendaBean.salvar}" update="formularioVenda"
                            onclick="PF('finalizar').hide();" />
                        <p:commandButton value="Voltar" onclick="PF('finalizar').hide();" />
                    </h:panelGrid>

                </h:form>


            </p:dialog>
        </div>

    </ui:define>
</ui:composition>

</html>
13 respostas

Fala aí Allison, blz?

Então creio que o problema da sua ultima implementação é que você não está passando para o item qual a venda dele.

Por isso ele diz que o id é requerido para carregar.

Tente isso aqui:

if (venda.getCodigo() == null) {
            Funcionario buscarPorId = funcionarioDao.buscarPorId(venda.getFuncionario().getCodigo());
            venda.setFuncionario(buscarPorId);
            vendaDao.salvar(venda);
            Produto buscarPorId2 = produtoDao.buscarPorId(item.getProduto().getCodigo());
            item.setProduto(buscarPorId2);
            item.setVenda(venda)
            itemDao.salvar(item);
            mensagem.mensagem("Venda efetuada com sucesso");
        }
    //restante da implementação
    ...

Espero ter ajudado.

Fala Fernando tranquilo? Qualquer opnião de vocês para tentar é muito bem vida, obrigado pela atenção e por me responder, fiz a alteração desejada e o resultado é o mesmo, e eu já tentei de tudo! kkk to nessa a mais de 5 dias kkk, mais é assim mesmo, e o pior que na minha faculdade ainda não estou tendo aula de java e nem conheço o professor de java para pode me ajudar :( o id do meu produto que está vindo nullo. Se eu postar a minha view ajuda? to tão perdido nesse erro que to mexendo em tudo kkkk.

fev 02, 2017 12:22:43 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.lang.IllegalArgumentException: id to load is required for loading
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:87)
    at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:59)
    at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2421)
    at org.hibernate.internal.SessionImpl.get(SessionImpl.java:974)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:807)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
    at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
    at org.jboss.weldx.persistence.EntityManager$196817612$Proxy$_$$_WeldClientProxy.find(Unknown Source)
    at br.com.bercalini.dao.ProdutoDao.buscarPorId(ProdutoDao.java:41)
    at br.com.bercalini.bean.VendaBean.salvar(VendaBean.java:53)
    at br.com.bercalini.bean.VendaBean$Proxy$_$$_WeldSubclass.salvar$$super(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:49)
    at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:77)
    at br.com.bercalini.gerenciamento.Gerenciamento.gerenciarTransacoes(Gerenciamento.java:24)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:74)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72)
    at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79)
    at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68)
    at br.com.bercalini.bean.VendaBean$Proxy$_$$_WeldSubclass.salvar(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
    at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
    at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:149)
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
    at javax.faces.component.UICommand.broadcast(UICommand.java:300)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Obrigado mais uma vez

Já tentei também

@Transacao
    public void salvar() {
        if (venda.getCodigo() == null) {
            Funcionario funcionario = funcionarioDao.buscarPorId(venda.getFuncionario().getCodigo());
            venda.setFuncionario(funcionario);
            vendaDao.salvar(venda);
            Produto produtoId = produtoDao.buscarPorId(item.getProduto().getCodigo());
            item.setProduto(produtoId);
            Venda vendaId = vendaDao.buscarPorCodigo(item.getVenda().getCodigo());
            item.setVenda(vendaId);
            itemDao.salvar(item);
            mensagem.mensagem("Venda efetuada com sucesso");
        } else {

        }
        this.venda = new Venda();
        this.itens = new ArrayList<Item>();
    }

e o erro é o mesmo null do produto :(

Fala aí Allison,

Tem como você verificar, se isso aqui está vindo nulo item.getProduto().getCodigo()? se não verifica se o retorno do método produtoDao.buscarPorId está retornando nulo?

O mesmo para venda.

Fernando beleza? sim o item.getProduto().getCodigo() está vindo nullo, e fazendo assim um simples teste, ele faz a venda, mais passando um id presente no banco.

@Transacao
    public void salvar() {
        if (venda.getCodigo() == null) {
            Funcionario funcionario = funcionarioDao.buscarPorId(venda
                    .getFuncionario().getCodigo());
            venda.setFuncionario(funcionario);
            vendaDao.salvar(venda);
            Produto produtoId = produtoDao.buscarPorId(1L);
            item.setProduto(produtoId);
            item.setVenda(venda);
            itemDao.salvar(item);
            mensagem.mensagem("Venda efetuada com sucesso");
        } else {

        }
        this.venda = new Venda();
        this.itens = new ArrayList<Item>();
    }

obrigado pela atenção. Oque devo fazer para resolver? kkk

Alguém para me ajudar? <>

As outras informações (nome, preço e etc...) do produto no item estão vindo preenchidas?

Ou seja só o código está vindo nulo?

Allison para não postergar mais do que estamos postergando. Tem como colocar seu projeto no github. Para que eu possa analisar e testar os caso se entender o pq seu produto não está sendo preenchido corretamente?

Meu projéto está aqui no github. https://github.com/bercaline/oficina

Fala Fernando tudo tranquilo? Deu certo a postagem no github? conseguiu ver se tem algo de errado no projeto? abraços

Olá Alisson, deu certo sim a postagem. Estou analisando seu código.

Certo, fiquei meio que pá, porque fiz o curso nas primeiras aulas e já peguei e fiz aqui para subir no github e tava meio em duvida se tinha ido ou não. Ok obrigado

Fala Fernando tudo tranquilão? Você tem alguma noticia do erro kkk?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software