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

5 respostas
T

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

5 Respostas

eltonk

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…

T

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
=]

T

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

Kleber-rr
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
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);

	}

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.

MarcolaLipe10

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 ...
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);
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
Criado 22 de novembro de 2007
Ultima resposta 28 de nov. de 2013
Respostas 5
Participantes 4