AbstractTableModel com Hibernate [problemas]

8 respostas
wssjwss

Olá pessoal,
Desenvolvir essas classes:

package hibern.tables;

import hibern.model.Contato;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class ContatoTableModel extends AbstractTableModel {

    private static final int COL_ID = 0;
    private static final int COL_NOME = 1;
    private static final int COL_FONE = 2;
    private static final int COL_EMAIL = 3;
    private List<Contato> listaContatos;

    public ContatoTableModel(List<Contato> lista) {
        this.listaContatos.addAll(lista);
    }

    @Override
    public int getRowCount() {
        return listaContatos.size();
    }

    @Override
    public int getColumnCount() {
        return listaContatos.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Contato contato = listaContatos.get(rowIndex);
        switch (columnIndex) {
            case COL_ID:
                return contato.getId();
            case COL_NOME:
                return contato.getNome();
            case COL_FONE:
                return contato.getFone();
            case COL_EMAIL:
                return contato.getEmail();
            default:
                return null;

        }
    }
}
package hibern.control;

import hibern.model.Contato;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;

public class ContatoControl {

    private Session session;
    private Transaction tx;

    public ContatoControl() {
        session = new Configuration().configure().buildSessionFactory().openSession();
        tx = session.getTransaction();
    }
    //Obtem a lista de acordo com o ID

    public List<Contato> getLista(Long id) {
        List<Contato> contatos = new ArrayList<>();
        try {
            tx.begin();
            contatos = session.createCriteria(Contato.class).add(Restrictions.like("ID", id)).list();
            tx.commit();
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return contatos;
    }
    //Obtem a lista de acordo com o NOME

    public List<Contato> getLista(String nome) {
        List<Contato> contatos = new ArrayList<>();
        try {
            tx.begin();
            contatos = session.createCriteria(Contato.class).add(Restrictions.like("NOME", "%" + nome + "%")).list();
            tx.commit();
        } catch (Exception ex) {
            ex.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return contatos;
    }
    //Obtem toda a lista dos contatos

    public List<Contato> getLista() {
        List<Contato> contatos = new ArrayList<>();
        try {
            tx.begin();
            contatos = session.createCriteria(Contato.class).list();
            tx.commit();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return contatos;
    }

    public void excluir(Contato contato) {
        try {
            tx.begin();
            session.delete(contato);
            tx.commit();
        } catch (HibernateException ex) {
            ex.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
    }

    public void salvar(Contato contato) {
        try {
            tx.begin();
            session.saveOrUpdate(contato);
            tx.commit();
        } catch (HibernateException ex) {
            ex.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
    }
}

depois:

public void fillTabela(JTable jTable) {
        ContatoControl contatoControl = new ContatoControl();
        List<Contato> contatos = contatoControl.getLista();
        ContatoTableModel modelo = new ContatoTableModel(contatos);
        jTable.setModel(modelo);
    }

e o ERRO é esse:

run:
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Environment <clinit>
Informações: Hibernate 3.2.5
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Environment <clinit>
Informações: hibernate.properties not found
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Environment buildBytecodeProvider
Informações: Bytecode provider name : cglib
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Environment <clinit>
Informações: using JDK 1.4 java.sql.Timestamp handling
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Configuration configure
Informações: configuring from resource: /hibernate.cfg.xml
Jun 29, 2012 4:21:56 PM org.hibernate.cfg.Configuration getConfigurationInputStream
Informações: Configuration resource: /hibernate.cfg.xml
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.Configuration addResource
Informações: Reading mappings from resource : contato.hbm.xml
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
Informações: Mapping class: hibern.model.Contato -> CONTATO
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.Configuration doConfigure
Informações: Configured SessionFactory: null
Jun 29, 2012 4:21:57 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: Using Hibernate built-in connection pool (not for production use!)
Jun 29, 2012 4:21:57 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: Hibernate connection pool size: 20
Jun 29, 2012 4:21:57 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: autocommit mode: false
Jun 29, 2012 4:21:57 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/test
Jun 29, 2012 4:21:57 PM org.hibernate.connection.DriverManagerConnectionProvider configure
Informações: connection properties: {user=root}
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: RDBMS: MySQL, version: 5.5.16
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} )
Jun 29, 2012 4:21:57 PM org.hibernate.dialect.Dialect <init>
Informações: Using dialect: org.hibernate.dialect.MySQLDialect
Jun 29, 2012 4:21:57 PM org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
Informações: Using default transaction strategy (direct JDBC transactions)
Jun 29, 2012 4:21:57 PM org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
Informações: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Automatic flush during beforeCompletion(): disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Automatic session close at end of transaction: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JDBC batch size: 15
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JDBC batch updates for versioned data: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Scrollable result sets: enabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JDBC3 getGeneratedKeys(): enabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Connection release mode: auto
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Maximum outer join fetch depth: 2
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Default batch fetch size: 1
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Generate SQL with comments: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Order SQL updates by primary key: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Order SQL inserts for batching: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
Informações: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
Jun 29, 2012 4:21:57 PM org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
Informações: Using ASTQueryTranslatorFactory
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Query language substitutions: {}
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: JPA-QL strict compliance: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Second-level cache: enabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Query cache: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory createCacheProvider
Informações: Cache provider: org.hibernate.cache.NoCacheProvider
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Optimize cache for minimal puts: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Structured second-level cache entries: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Statistics: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Deleted entity synthetic identifier rollback: disabled
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Default entity-mode: pojo
Jun 29, 2012 4:21:57 PM org.hibernate.cfg.SettingsFactory buildSettings
Informações: Named query checking : enabled
Jun 29, 2012 4:21:57 PM org.hibernate.impl.SessionFactoryImpl <init>
Informações: building session factory
Jun 29, 2012 4:21:57 PM org.hibernate.impl.SessionFactoryObjectFactory addInstance
Informações: Not binding factory to JNDI, no JNDI name configured
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
Informações: Running hbm2ddl schema update
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
Informações: fetching database metadata
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
Informações: updating schema
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: table found: test.contato
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: columns: [id, email, fone, nome]
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: foreign keys: []
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
Informações: indexes: [primary]
Jun 29, 2012 4:21:57 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
Informações: schema update complete
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at hibern.tables.ContatoTableModel.<init>(ContatoTableModel.java:24)
	at hibern.visualizacao.Principal.fillTabela(Principal.java:156)
	at hibern.visualizacao.Principal.<init>(Principal.java:25)
	at hibern.visualizacao.Principal$2.run(Principal.java:211)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
	at java.awt.EventQueue.access$000(EventQueue.java:102)
	at java.awt.EventQueue$3.run(EventQueue.java:662)
	at java.awt.EventQueue$3.run(EventQueue.java:660)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

mas no código do Netbeans não indica que é um erro.

Alguém pode me ajudar? estou seguindo o exemplo do site http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez

8 Respostas

F

Onde você está instanciando listaContatos?

wssjwss

Não instancio eu estou usando o retorno de lista do Criteria do hibernate. Génerico mesmo. A List só serve de referencia

public List<Contato> getLista() {
        List<Contato> contatos = new ArrayList<>();
        try {
            tx.begin();
            contatos = session.createCriteria(Contato.class).list();
            tx.commit();
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return contatos;
    }
wssjwss

achei o erro aqui:
antes

depois

private List<Contato> listaContatos = new ArrayList<>();

valeu fasts
agra vou quebrar a cabeça para exibir na JTable as colunas… abraços, Deus lhe abençoe.

ErickRAR

Você precisa instanciar o listaContatos antes de utilizar o addAll(); ou então fazer

public ContatoTableModel(List<Contato> lista) {  
        this.listaContatos = new ArrayList<Contato>(lista);  
    }
wssjwss

ErickRAR:
Você precisa instanciar o listaContatos antes de utilizar o addAll(); ou então fazer

public ContatoTableModel(List<Contato> lista) { this.listaContatos = new ArrayList<Contato>(lista); }

Foi realmente que eu fiz. Tudo resolvido! Obrigado pessoal.

d34d_d3v1l

cara, edita o tópico para [resolvido]…
perdi ‘viagem’ visitando um tópico que ja foi solucionado.
espero q entenda.

abraços

wssjwss

d34d_d3v1l:
cara, edita o tópico para [resolvido]…
perdi ‘viagem’ visitando um tópico que ja foi solucionado.
espero q entenda.

abraços

peço desculpas sou novato por aqui…

F

Vai quebrar a cabeça nada… É tranquilo.
É só implementar os métodos getValueAt e getColumnClass do teu model…

Deus te abençoe também!

Criado 29 de junho de 2012
Ultima resposta 30 de jun. de 2012
Respostas 8
Participantes 4