jTable armazena os dados mesmo qualdo cancela

eae pessoal!!

to com o seguinte problema…
eu tenho uma tela de cadastro que tem um jTable utilizando o TableModel…
e se eu alterar alguns dados dela ele jah altera na base de dados…
ai se eu clico no botao cancelar, os dados jah tão alterado…

alguem tem alguma ideia de como resolver??

vlw

Uma possibilidade é tu manter um List de dados antigos no teu table Model…Antes de salvar no banco de dados, tu passaria os registros q serão alterados para esse list, para armazenar o estado antigo. Caso vc queira cancelar, o teu list de dados antigos se torna o teu list “Oficial”…Apenas uma idéia…

Fernando

Provavelmente sua List foi carregada do Hibernate e ele altera a classe para enviar os dados para o banco em cada set se voce o configurou como auto-commit.

eae pessoal…

eu deixei o auto-commit false mas naum resolveu…

alguem tem alguma outra ideia???

vlw

Posta seu código do TableModel e da DAO que carrega os dados. Se possivel coloca também onde voce configura o Hibernate.

eae pessoal,

configuração do hibernate.

        <properties>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/bdfunj"/>
            <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.connection.autocommit" value="false"/>
        </properties>

Table Model

public class TMProtocolo extends AbstractTableModel {

    private List<EntidadeProtocolo> listtable;
    private DAO<EntidadeProtocolo> dao;
    private String[] coluna = {"Protocolo(s)"};

    public TMProtocolo() {
        dao = new DAO<EntidadeProtocolo>(EntidadeProtocolo.class);
        listtable = dao.list();

    }

    public TMProtocolo(List<EntidadeProtocolo> prot) {
        this.listtable = prot;
    }

    public TMProtocolo(Long id) {
        dao = new DAO<EntidadeProtocolo>(EntidadeProtocolo.class);
        listtable = dao.listaProtocolo(id);

    }

    public int getRowCount() {
        return listtable.size();
    }

    public int getColumnCount() {
        return coluna.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        EntidadeProtocolo u = listtable.get(rowIndex);
        return u.getProtocolo();

    }

    @Override
    public String getColumnName(int column) {
        return coluna[column];
    }
}

codigo do DAO

package br.com.sisfunrejus.acessobd;


import java.io.Serializable;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import org.hibernate.HibernateException;



public class DAO<E> {

    private Class<E> classeEntidade;
    private Query consulta;
    private EntityManager em;

    public DAO(Class<E> c) {
        try {
            this.classeEntidade = c;
            em = Banco.getInstancia().getEm();
            consulta = em.createQuery("from " + classeEntidade.getSimpleName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void update(E obj) {
        try {
            em.getTransaction().begin();
            em.merge(obj);
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
    }

    public void delete(E obj) {
        try {
            em.getTransaction().begin();
            em.remove(obj);
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    public List<E> list() {
        List<E> l = null;
        try {
            em.getTransaction().begin();
            l = consulta.getResultList();
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
        return l;
    }


    public List<E> listaProtocolo(String idGuia) {
        List<E> l = null;
        try {
            em.getTransaction().begin();
            Query consu=em.createQuery("from EntidadeProtocolo where guia.id="+idGuia);
            l = consu.getResultList();
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
        return l;
    }

     public List<E> listaRegistroAuxiliar(String idGuia) {
        List<E> l = null;
        try {
            em.getTransaction().begin();
            Query consu=em.createQuery("from EntidadeRegAux re where re.guia.id="+idGuia);
            l = consu.getResultList();
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
        return l;
    }

    public void insert(E obj) {
        try {
            em.getTransaction().begin();
            em.persist(obj);
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
    }

    public E find(Serializable id) {
        E c = null;
        try {
            em.getTransaction().begin();
            c = (E) em.find(classeEntidade, id);
            em.getTransaction().commit();
        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
        return c;
    }
        public E recupera(Long id) {
        E e = null;
        try {
            em.getTransaction().begin();
            e =(E) em.find(classeEntidade, id);
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (em.getTransaction().isActive()) em.getTransaction().rollback();
            ex.printStackTrace();
        }
        return e;
    }

    @SuppressWarnings("unchecked")
    public List<E> findByCriteria(org.hibernate.criterion.Criterion... criterion) {
        List<E> lista = null;
        em.getTransaction().begin();
        org.hibernate.Session session = ((org.hibernate.ejb.HibernateEntityManager) em).getSession();
        org.hibernate.Criteria crit = session.createCriteria(classeEntidade);
        for (org.hibernate.criterion.Criterion c : criterion) {
            crit.add(c);
        }
        lista = crit.list();
        em.getTransaction().commit();
        return lista;
    }

    @SuppressWarnings("unchecked")
    public List<E> findByExample(Object exampleInstance, String... excludeProperty) {
        List<E> lista = null;
        try {
            em.getTransaction().begin();
            org.hibernate.Criteria crit = ((org.hibernate.ejb.HibernateEntityManager) em).getSession().createCriteria(classeEntidade);
            org.hibernate.criterion.Example example = org.hibernate.criterion.Example.create(exampleInstance);
            for (String exclude : excludeProperty) {
                example.excludeProperty(exclude);
            }
            crit.add(example);
            lista = crit.list();
            em.getTransaction().commit();
        } catch (HibernateException ex) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            ex.printStackTrace();
        }
        return lista;
    }

    @SuppressWarnings("unchecked")
    public List<E> findByExamplePartial(Object exampleInstance, String... excludeProperty) {
        List<E> lista = null;
        try {
            em.getTransaction().begin();
            org.hibernate.Criteria crit = ((org.hibernate.ejb.HibernateEntityManager) em).getSession().createCriteria(classeEntidade);
            org.hibernate.criterion.Example example = org.hibernate.criterion.Example.create(exampleInstance);
            example.enableLike(org.hibernate.criterion.MatchMode.ANYWHERE);
            example.ignoreCase();
            example.excludeZeroes();
            for (String exclude : excludeProperty) {
                example.excludeProperty(exclude);
            }
            crit.add(example);
            lista = crit.list();
            em.getTransaction().commit();
        } catch (HibernateException ex) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            ex.printStackTrace();
        }
        return lista;
    }
}

Hmm… na DAO, antes de carregar, coloque setAutoCommit(false) na Session que voce carrega do Hibernate.

eae Marky,

pra persistir os dados eu uso a entidade, dao, e o arquivo de configuração do hibernate…

onde eu coloco o setAutoCommit(false)???

sou iniciante em java, ainda tenho bastant dificuldade…

vlw por ajudar

flw

Quando vai criar um Criteria.

Invés de:

org.hibernate.Criteria crit = ((org.hibernate.ejb.HibernateEntityManager) em).getSession().createCriteria(classeEntidade);   

Use:

Session s = ((org.hibernate.ejb.HibernateEntityManager) em).getSession();
s.connection().setAutoCommit(false);
org.hibernate.Criteria crit = s.createCriteria(classeEntidade);   

Pra falar a verdade deveria ter uma maneira mais facil. Mas nao consegui lembrar.

eae marky,

eu mais uma vez…

e nesse caso quando eu não estou utilizando a criteria…

tem como eu usar o setAutoCommit(false);

    public EntityOrcamento consultaOrcamentoFetch(Long id){
                EntityOrcamento ret = null;

        try {
            em.getTransaction().begin();
            Query con =em.createQuery("from EntityOrcamento AS orc " +
                    "LEFT JOIN FETCH orc.funcionario " +
                    "LEFT JOIN FETCH orc.plano_pagamento " +
                    "LEFT JOIN FETCH orc.cliente " +
                    "LEFT JOIN FETCH orc.itemOrcamento " +
                    "where orc.id="+id +" order by orc.id");

            ret = (EntityOrcamento) con.getSingleResult();


            em.getTransaction().commit();

        } catch (Exception e) {
            if (em.getTransaction().isActive()) {
                em.getTransaction().rollback();
            }
            e.printStackTrace();
        }
        return ret;
    }

vlw fera!!

Voce tem que pegar a Session do mesmo jeito e fazer aquilo.