Problemas com Hibernate + HSQLDB

8 respostas
J
Ola pessoal, preciso implementar um projeto onde quando nao houver conexao com internet ele comeca a trabalhar localmente, Para que depois eu possa exportar. Estou tentando utilizar esse HSQLDB, que funcionou porem quando coloquei o Hibernate nao funcionou mais.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package util;

import java.sql.SQLException;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author jean
 */
public class teste {
    
    private static Session session;
       
    public teste(){
        
    }
    
    public static void main(String[] args) throws SQLException{
       Transaction tx = null;   
       session = ConnectionFactory.getInstance();
       tx = session.beginTransaction();
       Pessoa jean = new Pessoa(1,"Jean");
       session.save(jean);
       tx.commit();
       List list = session.createQuery("from util.Pessoa").list();
       System.out.print(list);
       session.close();
    }
}
package util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;


/**
 * Cria Conexao remota ou local com banco
 * @author jean
 */
public class ConnectionFactory {
    private static SessionFactory sessionFactory;
    private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private static String conf = "/util/hibernate.cfg.xml";

    /**
     * Cria a conexao e decide se a mesma sera
     * local ou remota.
     */
    static{
        try{
            sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml")
                    .buildSessionFactory();
        }catch(Throwable t){
            throw new ExceptionInInitializerError(t);
        }
    }
    /**
     * @return Retorna a instancia da conexao
     */
    public static Session getInstance(){
        Session session = (Session) threadLocal.get();
        session = sessionFactory.openSession();
        threadLocal.set(session);
        return session;
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<!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:file:banco/dedao</property>
        <property name="connection.username">sa</property>
        <property name="connection.password"></property>
        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
	<mapping class="util.Pessoa" />
    </session-factory>
</hibernate-configuration>

Ele nao imprimi nada alem de uma posicao na memoria.
e no arquivo do banco nao aparece tabela e nem insert.

Se alguem tiver uma sugestao melhor para esse problema
eu agradeco. pois estou axando que instalar o postgre em cada terminal
nao vale a pena. Obrigado

8 Respostas

Emerson_Macedo

Sorry post errado !!!

Errado não, tava certo, você editou a mensagem e colocou o que estava acontecendo…

O problema está aqui.

System.out.print(list);

Você deve iterar sobre a lista.

justoeu

Cara, a principio esta certo, o problema é que vc esta dando um print em um List ai no caso ele vai mostrar o endereço de memoria.

Como nosso amigo disse, faz um iterator ai, pegando o objeto e ja era

for(Objeto o : list){

print…

}

[]´s

J

Ola pessoa, funcinou, muito obrigado
Porem a cada vez que eu rodo meu programa,
ele nao mantem os q eu inseri da outra vez,
existe como manter isso? Obrigado

Obs: nao entendo de HSQLDB mas isso
esta no meu conf:

<property name="hibernate.hbm2ddl.auto">update</property>
justoeu

Fala ai velho…

Bem eu não entendi o que vc quiz dizer quando escreveu "ele nao mantem os q eu inseri da outra vez, "… vc esta dando release nos objetos que retornam os selects??

se não tiver, da uma olhada, pois provavelmente o hibernate esta dom os dados em cache.

[]´s

J

Bom o que eu quis dizer e
que funcinou, porem depois q eu executo novamente
mas sem inserts, apenas com um select ele
nao tras nada, isso e, nao ersta ficando gravado
no arquivo de script.

maiconramones

Tem que ver se o teu banco hsqldb não esta “subindo” somente em memória… ou seja, terminou a execução do programa os dados são liberados da memória e não são persistidos…

Para mais detalhes do hsqldb tem um tuto aqui
http://www.guj.com.br/content/articles/hsqldb/hsqldb_guj.pdf

Abraço,

renatocustodio

Aquele update do .hbm2ddl apenas atualiza as tabelas. Não deleta as que já existem não né pessoal?(agora fiquei na dúvida…)

maiconramones

Até onde eu sei ele valida o esquema e atualiza caso seja necessário

Criado 13 de março de 2008
Ultima resposta 14 de mar. de 2008
Respostas 8
Participantes 5