Tabela HSQLDB nao grava no Hibernate

4 respostas
jopss

Fala galera do mau… sudhsuadhas

To com um problema no Hibernate…

Estou usando Hibernate 3.2 + Annotations 3.2.1 + HSQLDB 1.8

Eu gravo meus dados no banco td blz… mas quando eu fecho e abro novamente, nao tem nada no banco!!!

Estou usando o NetBeans e vejo q, antes de reinicializar, ele faz um drop table if exists… entao, suponho eu, q ele esteja apagando as minhas tabelas tds sempre q reinicializa, apagando td… tanto q quando dah erro, nao aparecendo o drop table e deixa entrar no programa para cadastrar denovo, tds os dados sao retornados!!!

Sera q nao tem como eu tirar este drop table??

Ou eh um problema no HSQLDB???

Grato pela atenção…

Joao Paulo
[email removido]

Tai minha classe cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        
        <property name="connection.driver_class">
            org.hsqldb.jdbcDriver
        </property>
        
        <property name="connection.url">
            jdbc:hsqldb:bancoboleto;shutdown=true
        </property>
        
        <property name="connection.username">sa</property>
        
        <property name="connection.password"></property>
        
        <property name="dialect">
            org.hibernate.dialect.HSQLDialect
        </property>
        
        <property name="connection.pool_size">1</property>
        
        <mapping class="modelo.Cliente"/>
        <mapping class="modelo.Empresa"/>
    </session-factory>
</hibernate-configuration>

e como eu faço o cadastro e consulta… tenho um HibernateFactory q retorna os transations e session…

try{
            
            modelo.HibernateFactory.getSession().beginTransaction();
            modelo.HibernateFactory.beginTransaction();
            
            Cliente cli = new Cliente(tela.getNome(),tela.getEndereco(),tela.getUf(),tela.getCidade(),
                    tela.getCep(),tela.getBairro(),tela.getComplemento(),tela.getNumero());
            
            //se o tiver alguma coisa no nome
            if(cli.getNome().trim().length()>0){
                modelo.HibernateFactory.getSession().save(cli);
                modelo.HibernateFactory.commitTransaction();
            }
            
            javax.swing.JOptionPane.showMessageDialog(null,"Cliente Cadastrado.");
            
            org.hibernate.Query qq = modelo.HibernateFactory.getSession().createQuery( "select c from Cliente as c order by c.nome" );
            Iterator<Cliente> it = qq.list().iterator();
            while(it.hasNext()){
                Cliente c = it.next();
                JOptionPane.showMessageDialog(null,c.getNome());
            }
            
        }catch(Exception e){
            e.printStackTrace();
        }

Qual será o erro??

4 Respostas

renandemelo

Pergunta,

Como está o código do seu HibernateFactory? Por acaso você não está dando um new SchemaExport(). alguma coisa que cria as tabelas né? porque se estiver dando, então toda a vez ele irá recriar as tabelas por causa deste código.

jopss

Opa, era isso mesmo kara… eh q peguei essa classe de uma migo meu… tai

public class HibernateFactory {
                   
    private static SessionFactory sessionFactory;
    
    private static final ThreadLocal threadSession = new ThreadLocal();
        
    private static final ThreadLocal threadTransaction = new ThreadLocal();
           
    static {
        try{            
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();            
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    
    public static Session getSession(){
        Session s = (Session) threadSession.get();
                
        try{
            if (s == null){
                s = getSessionFactory().openSession();                
                threadSession.set(s);
            } else {                
                threadSession.set(s);
            }                     
        } catch (Exception e){
            e.printStackTrace();            
        }
        
        return s;        
    }
    
    public static void closeSession(){
        try{
            Session s = (Session) threadSession.get();
            threadSession.set(null);
            
            if (s != null && s.isOpen()){
                s.close();
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    
    public static void beginTransaction(){
        Transaction tx = (Transaction) threadTransaction.get();
        
        try{
            if (tx == null){
                tx = getSession().beginTransaction();
                threadTransaction.set(tx);
            }            
        } catch (Exception e){
            e.printStackTrace();
        }
    }
    
    public static void commitTransaction(){
        Transaction tx = (Transaction) threadTransaction.get();
        
        try{
            if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){                
                tx.commit();
            }
            threadTransaction.set(null);
        } catch (Exception e){
            rollbackTransaction();
            e.printStackTrace();
        }
    }
    
    public static void rollbackTransaction(){
        Transaction tx = (Transaction) threadTransaction.get();
        
        try{
            threadTransaction.set(null);
            if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()){
                tx.rollback();
            }
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            closeSession();
        }
    }   
    
    public static AnnotationConfiguration getConfiguration(){
        AnnotationConfiguration cfg = new AnnotationConfiguration();
        cfg.configure();
        return cfg;
    }

    private static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}
public class HibernateUtil {
    
    public void updateDataBase ( ) throws HibernateException {        
        
        SchemaUpdate update = new SchemaUpdate(
                new HibernateFactory().getConfiguration() );
        
        update.execute( true, true );
        
    }
    
    public void createDataBase ( ) throws HibernateException {
        
        SchemaExport export = new SchemaExport( 
                new HibernateFactory().getConfiguration() );
        
        export.create( true, true );
    }
}

Agora, no Main, eu uso ao inves de createDataBase , updateDataBase do HibernateUtil

Dai funfa legal!!!

Tem problema eu usar direto o updateDataBase desde o começo??

jopss

renandemelo

Sinceramente eu não sei, caso você descubra me dá um toque, blz?

_fs

Você precisa fazer isso aqui ao final de cada transação:

session.connection().createStatement().execute( "SHUTDOWN" );

Dói mas é verdade.

Criado 10 de dezembro de 2006
Ultima resposta 13 de dez. de 2006
Respostas 4
Participantes 3