Help JPA

0 respostas
fabioebner

Pessoal estou comum problema.. tenho o seguinte codigo para salvar um esquema no banco:

if (tbProtocoloBean.getCdProtocolo() != null) {
        Conexao.beginTransacao();
        try {
            DocumentoFACADE documentoFacade = new DocumentoFACADE();
            tbDocumentoBean.setCdProtocolo(tbProtocoloBean);
            documentoFacade.salvarEditarDocumento(tbDocumentoBean, "Usuario");
           
            Conexao.commitTransacao();
            
            habilitaDesabilitaFormDocumento();

            Binding bindingDocumentos = bindingGroup.getBinding("bindingDocumentosProtocolo");
            bindingDocumentos.unbind();
            TbDocumento documentoAdicionado = new TbDocumento();
            propBean.copyProperties(documentoAdicionado, tbDocumentoBean);
            if (documentoAnterior != null) {
                tbDocumentoList.remove(documentoAnterior);
                tbProtocoloBean.getTbDocumentoCollection().remove(documentoAdicionado);
            }
            tbDocumentoList.add(documentoAdicionado);
            tbProtocoloBean.getTbDocumentoCollection().add(documentoAdicionado);

            this.totalDocumentos = tbDocumentoList.size() - 1;
            this.documentoAtual = totalDocumentos;
            bindingDocumentos.bind();


            jbtEditarDocumento.setEnabled(!(jbtEditarDocumento.isEnabled()));
            jbtNovoDocumento.setEnabled(!(jbtNovoDocumento.isEnabled()));
            jbtCancelarDocumento.setEnabled(!(jbtCancelarDocumento.isEnabled()));
            jbtSalvarDocumento.setEnabled(!(jbtSalvarDocumento.isEnabled()));

            selecionarDocumentoProtocolo(this.documentoAtual);
            verificaBotoesNavegadorDocumentos();
            documentoAnterior = null;
        } catch (Exception e) {
            e.printStackTrace();
            Conexao.rollbackTransacao();
        }
    } else {
        JOptionPane.showMessageDialog(null, "Protocolo não finalizado", "ATENÇÃO", JOptionPane.INFORMATION_MESSAGE);
    }
a minha classe de conexao esta asim:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.dnasolution.dao;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;

/**
 *
 * @author Administrador
 */
public class Conexao {

    private static Conexao instancia;
    private static EntityManagerFactory emf;
    private static final String NOMEPU = "NotasPU";  
    public static  EntityManager SESSION;  
    
    
    public static synchronized void conectar(){
        /* Mudar o direcionamento do banco (IP)
         Map propertiesMap = new HashMap();
         propertiesMap.put(TopLinkProperties.JDBC_URL, "jdbc:postgresql://localhost:5432/db_dnaso");
        emf = Persistence.createEntityManagerFactory("NotasPU",propertiesMap);*/

        if (emf == null) {      
          emf = Persistence.createEntityManagerFactory(NOMEPU);
       }   
    }
    
    public static Conexao getInstance() {
        if (instancia == null) {
            instancia = new Conexao();
        }
        return instancia;
    }

          
    public static EntityManager getCurrentEM() {   
           if (SESSION == null) {    
               conectar();  
               SESSION = emf.createEntityManager();  
 
            SESSION.setFlushMode(FlushModeType.COMMIT);
           }  
           return SESSION;  
       }  
         
    public static void fecharConexao() {   
        if (SESSION != null) {  
           SESSION.close();  
        }    
    }  

        
    public static void beginTransacao(){
      SESSION.getTransaction().begin();
    }
    
    public static void commitTransacao(){
       SESSION.getTransaction().commit();
    }
    
    public static void rollbackTransacao(){
        SESSION.getTransaction().rollback();
    }
    
}
qdo eu executo o meu salvar 1 vez ele faz correto qdo eu executo a segunda ele me retorna o seguinte erro:
[TopLink Warning]: 2008.10.10 04:41:53.906--UnitOfWork(30385106)--Exception [TOPLINK-7251] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException Exception Description: The attribute [cdDocumento] of class [br.com.dnasolution.entity.TbDocumento] is mapped to a primary key column in the database. Updates are not allowed. javax.persistence.RollbackException: Exception [TOPLINK-7251] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException Exception Description: The attribute [cdDocumento] of class [br.com.dnasolution.entity.TbDocumento] is mapped to a primary key column in the database. Updates are not allowed. at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:120) at oracle.toplink.essentials.internal.ejb.cmp3.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:60) at br.com.dnasolution.dao.Conexao.commitTransacao(Conexao.java:65) at br.com.dnasolution.gui.GerenciarProtocoloJF.jbtSalvarDocumento(GerenciarProtocoloJF.java:1328) at br.com.dnasolution.gui.GerenciarProtocoloJF.access$2200(GerenciarProtocoloJF.java:36) at br.com.dnasolution.gui.GerenciarProtocoloJF$17.actionPerformed(GerenciarProtocoloJF.java:746) 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.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 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: Exception [TOPLINK-7251] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException Exception Description: The attribute [cdDocumento] of class [br.com.dnasolution.entity.TbDocumento] is mapped to a primary key column in the database. Updates are not allowed. at oracle.toplink.essentials.exceptions.ValidationException.primaryKeyUpdateDisallowed(ValidationException.java:2222) at oracle.toplink.essentials.mappings.foundation.AbstractDirectMapping.writeFromObjectIntoRowWithChangeRecord(AbstractDirectMapping.java:750) at oracle.toplink.essentials.internal.descriptors.ObjectBuilder.buildRowForUpdateWithChangeSet(ObjectBuilder.java:948) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.updateObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:1263) at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:150) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:390) at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:109) at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628) at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:555) at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:138) at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:110) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233) at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952) at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909) at oracle.toplink.essentials.mappings.ObjectReferenceMapping.insert(ObjectReferenceMapping.java:826) at oracle.toplink.essentials.mappings.ObjectReferenceMapping.preInsert(ObjectReferenceMapping.java:451) at oracle.toplink.essentials.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:892) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:521) at oracle.toplink.essentials.queryframework.InsertObjectQuery.executeCommit(InsertObjectQuery.java:89) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:750) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:714) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.insertObjectForWriteWithChangeSet(DatabaseQueryMechanism.java:602) at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:162) at oracle.toplink.essentials.internal.queryframework.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:390) at oracle.toplink.essentials.queryframework.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:109) at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628) at oracle.toplink.essentials.queryframework.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:555) at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:138) at oracle.toplink.essentials.queryframework.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:110) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2233) at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952) at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909) at oracle.toplink.essentials.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:269) at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:246) at oracle.toplink.essentials.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:202) at oracle.toplink.essentials.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:2657) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1044) at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:403) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1126) at oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:107) at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:856) at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.commit(EntityTransactionImpl.java:102) ... 31 more Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Exception Description: No transaction is currently active at oracle.toplink.essentials.internal.ejb.cmp3.transaction.base.EntityTransactionImpl.rollback(EntityTransactionImpl.java:140) at br.com.dnasolution.dao.Conexao.rollbackTransacao(Conexao.java:69) at br.com.dnasolution.gui.GerenciarProtocoloJF.jbtSalvarDocumento(GerenciarProtocoloJF.java:1358) at br.com.dnasolution.gui.GerenciarProtocoloJF.access$2200(GerenciarProtocoloJF.java:36) at br.com.dnasolution.gui.GerenciarProtocoloJF$17.actionPerformed(GerenciarProtocoloJF.java:746) 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.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 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)
segue o meu codigo do metodo editarSalvarDocumento
public void salvarEditarDocumento(TbDocumento tbDocumentoBean, String usuario) throws Exception {
        if(tbDocumentoBean.getCdDocumento() == null){
            documentoDAO.persist(tbDocumentoBean);
            documentoAndamentoFacade.salvarAndamento(tbDocumentoBean,"ENTRADA",usuario);
        }else{
            documentoDAO.update(tbDocumentoBean);
        }
    }
e o do meu salvar andamento
public void salvarAndamento(TbDocumento tbDocumentoBean, String andamento, String usuario) throws Exception {
        TbDocumentoAndamento documentoAndamento = new TbDocumentoAndamento();
        documentoAndamento.setCdDocumento(tbDocumentoBean);
        documentoAndamento.setDtAndamento(new Date());
        documentoAndamento.setHrAndamento(new Date());
        documentoAndamento.setNmAndamento(andamento);
        documentoAndamento.setNmUsuarioAndamento(usuario);
        documentoAndamentoDAO.persist(documentoAndamento);
        tbDocumentoBean.getTbDocumentoAndamentoCollection().add(documentoAndamento);
    }

alguem pode me ajudar??

valeu

Criado 10 de outubro de 2008
Respostas 0
Participantes 1