Erro ao salvar um objeto

1 resposta
T

ola pessoal
estou com um probleminha ao salvar “itens”… eis as linhas de cod…

no DAOItens

private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("projetoPU");

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

no botao

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.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            itens.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            itens.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            itens.setVenda(venda);
            itens.setProduto(produto);
            daoItens.salvarItens(itens);
       }

o erro…

init:
deps-jar:
compile:
run:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
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:41)
        at org.iVitrim.telas.Vendas.jbtEfetuarVendaActionPerformed(Vendas.java:684)
        at org.iVitrim.telas.Vendas.access$1300(Vendas.java:29)
        at org.iVitrim.telas.Vendas$16.actionPerformed(Vendas.java:487)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
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

situacao:
eu uso uma tabela para mostrar os itens;
por exemplo 3 itens estao na tabela,
dae o dtmitens.getrowcount() pega a quantidades de itens a serem adicionados, “contruindo” o for…

na primeira vez que passa pelo for… ele salva tdo certinho… aparece o “salvo itens com sucesso” mas na segunda vez por diante ja da erro, e na tabela do banco aparece soh a venda e um item

tvz seja problema no salvaItens(), ou no botao… mas nao sei o que eh…

se alguem puder me auxiliar…

grato

1 Resposta

T

eu tentei de outra forma…

botao salvar

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.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            itens.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            itens.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            itens.setVenda(venda);
            itens.setProduto(produto);
           
            venda.addItens(itens);
           
        }
        daoVenda.salvarVenda(venda);

o metodo addItens()

public void addItens(Itens item){
        if(this.itensCollection == null){
            this.itensCollection = new ArrayList<Itens>();
        }
        this.itensCollection.add(item);
    }

nao aparece nenhum erro e apareentemente salva os dados, porem nao no banco… aparrece somente a venda e UM item

eu ate creio que dessa forma seja melhor pq trabalha bem com OO hehe

se alguem puder me dizer como procurar o erro, ou alguma dica…
qlquer coisa
hehe

flw

Criado 18 de novembro de 2007
Ultima resposta 18 de nov. de 2007
Respostas 1
Participantes 1