Erro ao salvar(detached entity passed to persist)[resolvido]

ola
estou com um probleminha ao salvar os itens numa venda…

coloco os itens numa tabela, faço um for que percorre os itens, dae tento salvar numa tabela itens…

daoVenda.salvarVenda(venda);
        int linhas = dtmitens.getRowCount();
        Itens itens = new Itens();
        for (int i = 0; i < linhas; i++) {
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            itens.setProduto(produto);          itens.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
itens.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            itens.setVenda(venda);
            daoItens.salvarItens(itens);
}

na primeira vez que ele passa pelo for ele grava certinho no banco, mas da erro na segunda vez em diante… ou seja, na tabela aparece a venda com um item somente…

o erro:

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: org.iVitrim.model.Itens
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
        at org.iVitrim.dao.DAOItens.salvarItens(DAOItens.java:37)
        at org.iVitrim.telas.Vendas.jbtSalvarOrcamentoActionPerformed(Vendas.java:864)
...............
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: org.iVitrim.model.Itens
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
        at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
        ... 29 more

se alguem puder me ajudar por favor…

vlw

Faça com que teu sistema somente salve os itens depois do for…
Como está agora, tu está fechando com um “commit” a tua transação logo depois que acaba a primeira rodada do for…

opa
eu coloquei um metodo na classe venda

public void addVendaProduto(VendaProduto vendaProduto){
        if(this.vendaProdutoCollection == null){
            this.vendaProdutoCollection = new ArrayList<VendaProduto>();
        }
        this.vendaProdutoCollection.add(vendaProduto);
    }

eu fiz assim o for

int linhas = dtmitens.getRowCount();
        VendaProduto vendaProduto = new VendaProduto();
        for (int i = 0; i < linhas; i++) {
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            vendaProduto.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            vendaProduto.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            vendaProduto.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            vendaProduto.setVenda(venda);
            vendaProduto.setProduto(produto);
            venda.addVendaProduto(vendaProduto);
        }
        daoVenda.salvarVenda(venda);

agora ele salva na tabela venda e tabela vendaProduto… porem nao mais que um produto ou seja
na tabela vendaProduto ou Itens… aparece a venda e um produto somente

nao aparece nenhum erro dessa forma

mas da forma de salvar dentro do for direto na tabela itens ou vendaProduto aparece esse erro na hora do segundo produto a salvar (o primeiro salva), do for no caso

detached entity passed to persist: org.iVitrim.model.Produto

metodo salvar


public void salvarVenda(Venda venda){
        if(!em.isOpen()){
        em = emf.createEntityManager();
        }
        em.getTransaction().begin();
        try {
            em.persist(venda);
            em.getTransaction().commit();
            JOptionPane.showMessageDialog(null,"Venda salva com sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Erro ao salvar a venda","Atenção!",JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

o salvar VendaProduto soh muda o

em.persist(venda);

para

em.persist(VendaProduto);//variavel

qto antes melhor se alguem puder me ajudar…

desde ja eu agradeço
=]

ola
obrigado pelas dicas… consegui resolver =]

solucao:

antes (cod. botao)

daoVenda.salvarVenda(venda);//
int linhas = dtmitens.getRowCount();
VendaProduto vendaProduto = new VendaProduto();//
        for (int i = 0; i < linhas; i++) {
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            vendaProduto.setProduto(produto);
            vendaProduto.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            vendaProduto.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            vendaProduto.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            vendaProduto.setVenda(venda);
            daoVendaProduto.salvarVendaProduto(vendaProduto);//
        }
        

depois …

metodo

public void addVendaProduto(VendaProduto vendaProduto){
        if(this.vendaProdutoCollection == null){
            this.vendaProdutoCollection = new ArrayList<VendaProduto>();
        }
        this.vendaProdutoCollection.add(vendaProduto);
    }

cod.botao

int linhas = dtmitens.getRowCount();
        for (int i = 0; i < linhas; i++) {
            VendaProduto vendaProduto = new VendaProduto();//motivo do problema... ¬¬
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            vendaProduto.setProduto(produto);
            vendaProduto.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            vendaProduto.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            vendaProduto.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            vendaProduto.setVenda(venda);
            venda.addVendaProduto(vendaProduto);//
        }
        daoVenda.salvarVenda(venda);//

se alguem tiver o mesmo problema tvz ajude…

vlw

Olá pessoal, estou com um problema parecido, só que no meu caso, eu consigo realizar apenas uma avaliação de demanda com sucesso… a partir daí, me dá o mesmo erro

Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.entities.Avaliacao

[code]public void avaliarDemanda(ActionEvent event) {
RequestContext context = RequestContext.getCurrentInstance();
boolean avaliacaoCorreta = false;
System.out.println(“avaliacaoCorreta: " + avaliacaoCorreta);
if (this.resultadoSelecionado.equals(”") || this.resultadoSelecionado == null || this.avaliacao.getObs().equals("") || this.avaliacao.getObs() == null) {
avaliacaoCorreta = false;
System.out.println(“Por favor, preencha os campos corretamente!”);
FacesUtils.messageError(“Por favor, preencha os campos corretamente!”);
} else {
AuxResultado ar = this.resultadoDao.buscarPorDescricao(this.resultadoSelecionado);
Demanda d = this.demandaDao.buscarPorId(this.selectedCell.getDemanda().getId());
this.avaliacao.setDataAvaliacao(DateUtils.returnToday());
System.out.println("data: " + DateUtils.returnToday());
this.avaliacao.setDemanda(d);
System.out.println("demanda: " + d);
this.avaliacao.setResultado(ar);
System.out.println("resultado: " + ar);
this.avaliacao.setFuncionario(usuarioEmSessao().getFuncionario());
System.out.println("usuario: " + usuarioEmSessao().getFuncionario());
AuxStatus s = this.statusDao.buscarStatusPorDescricao(DemandaStatus.CONCLUIDA.getNome());
d.setStatus(s);
this.avaliacaoDao.salvar(this.avaliacao);
this.demandaDao.atualizar(d);
avaliacaoCorreta = true;
init();
System.out.println(“Avaliação Concluída com Sucesso!”);
FacesUtils.messageInfo(“Avaliação Concluída com Sucesso!”);
}
context.addCallbackParam(“avaliacaoCorreta”, avaliacaoCorreta);

}[/code]

O que eu percebi é que após ele salvar com sucesso a primeira avaliação, a partir daí ele não limpa mais os campos do form… Creio que ele não esteja limpando os dados da session…

Estou usando JSF2.0 + spring + primefaces.

Se alguem puder ajudar, agradeço.

Ae me ajuda aqui tbm !!

To enrolado nessa condição …
Bem galera, estou com um erro estranho. No momento que tento Persistir minha venda recebo esse erro, com referência a Classe Usuário:

Erro Permissão Fecha NF: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario
view plaincopy to clipboardprint?
Porém, a única coisa que faço com o Usuário aqui nesse ponto é seta-lo na Saída para monitorar quem efetuou a venda …

[code]AtualizaMovimento am = new AtualizaMovimento();
getSaida().setMovimentos(am.atualiza(saida));

EstoqueRepository er = new EstoqueRepository(getEntityManager());
er.atualizaSaida(getDadosVenda(), getUsuarioSessao());

getSaida().setContasaReceber(getContasaReceber());

SaidaRepository sr = new SaidaRepository(getEntityManager());

getSaida().setSituacao(“F”);
saida.setDataFechamento(new Date());
saida.setHoraFechamento(new Date());
saida.setUsuarioFechamento(getUsuarioSessao());

sr.salvar(saida);
[/code]
Classe Saida

view plaincopy to clipboardprint?

public class Saida implements Serializable {  
        @ManyToOne  
    @JoinColumn(name="usuarioFechamento")  
    private Usuario usuarioFechamento;  

Classe Usuário

public class Usuario implements Serializable{  
  
    private static final long serialVersionUID = 5465615454325030138L;  
    @Id  
    @GeneratedValue(strategy=GenerationType.AUTO)  
    private Integer   id;  
    private String nome;  
    private String usuario;  
    private String senha;  
    private String situacao;  
    private boolean logado;  
    private String theme;  
      
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
    //                      MONITORAMENTO  
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
      
    @Temporal(TemporalType.DATE)  
    private Date ultimoAcesso;  
    @Temporal(TemporalType.TIME)  
    private Date horaUltimoAcesso;  
    @Temporal(TemporalType.DATE)  
    private Date data_Cadastro;  
    @Temporal(TemporalType.TIME)  
    private Date hora_Cadastro;  
    @Temporal(TemporalType.DATE)  
    private Date data_Alteracao;  
    @Temporal(TemporalType.TIME)  
    private Date hora_Alteracao;  
      
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
    //              RELACIONAMENTOS MANY TO ONE  
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
      
    @ManyToOne  
    @JoinColumn(name="grupoUsuario")  
    private GrupoUsuario grupoUsuario;  
      
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
    //              RELACIONAMENTOS ONE TO ONE  
    /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
      
    @OneToOne  
    @JoinColumn(name="funcionario")  
    private Funcionario funcionario;  

E todo o Erro:

Erro Permissão Fecha NF: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.UsuarioNov 27, 2013 5:11:37 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException  
Grave: Error Rendering View[/pages/saida/venda.xhtml]  
javax.el.ELException: /pages/saida/venda.xhtml @601,47 value="#{vendaPlanosBean.saidas}": Error reading 'saidas' on type br.com.duxsolutions.bean.VendaPlanosBean  
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:114)  
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)  
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)  
    at javax.faces.component.UIData.getValue(UIData.java:731)  
    at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:867)  
    at org.primefaces.component.api.UIData.getDataModel(UIData.java:579)  
    at javax.faces.component.UIData.getRowCount(UIData.java:356)  
    at org.primefaces.component.api.UIData.calculateFirst(UIData.java:157)  
    at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:176)  
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:82)  
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)  
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)  
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)  
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)  
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)  
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)  
    at org.primefaces.component.dialog.DialogRenderer.encodeContent(DialogRenderer.java:172)  
    at org.primefaces.component.dialog.DialogRenderer.encodeMarkup(DialogRenderer.java:101)  
    at org.primefaces.component.dialog.DialogRenderer.encodeEnd(DialogRenderer.java:43)  
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)  
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)  
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)  
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)  
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)  
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)  
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)  
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)  
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)  
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)  
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)  
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)  
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)  
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)  
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)  
    at br.com.duxsolutions.filter.ControleFiltro.doFilter(ControleFiltro.java:33)  
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)  
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)  
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)  
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)  
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)  
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)  
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)  
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)  
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)  
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)  
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)  
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)  
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)  
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)  
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)  
    at java.lang.Thread.run(Unknown Source)  
Caused by: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario  
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)  
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)  
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:245)  
    at br.com.duxsolutions.repository.SaidaRepository.saidaAll(SaidaRepository.java:39)  
    at br.com.duxsolutions.bean.VendaPlanosBean.getSaidas(VendaPlanosBean.java:1603)  
    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 javax.el.BeanELResolver.getValue(BeanELResolver.java:87)  
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)  
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)  
    at org.apache.el.parser.AstValue.getValue(AstValue.java:183)  
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)  
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)  
    ... 50 more  
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.duxsolutions.model.Usuario  
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127)  
    at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:826)  
    at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:818)  
    at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:357)  
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)  
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)  
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)  
    at org.hibernate.engine.Cascade.cascade(Cascade.java:161)  
    at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:451)  
    at org.hibernate.event.def.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:158)  
    at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)  
    at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:826)  
    at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:818)  
    at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:357)  
    at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392)  
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335)  
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)  
    at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:425)  
    at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:362)  
    at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:338)  
    at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204)  
    at org.hibernate.engine.Cascade.cascade(Cascade.java:161)  
    at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)  
    at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)  
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)  
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)  
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1175)  
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1251)  
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)  
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:236)  
    ... 62 more