Hibernate + HSQLDB rodando em modo standalone, é possível?

Olá…

Estou utilizando HSQLDB em uma aplicação desktop e gostaria muito de usar Hibernate. É possível fazer isso?
Vou usar o HSQLDB em modo standalone, a principio. Ou teria uma opção mais adequada?

bem, eu fiz um programa exemplo, e as informações não eram persistidas, e não raro ocorria problemas de locking dos arquivos do HSQLDB.

seguem alguns fontes:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.dialect">
			org.hibernate.dialect.HSQLDialect</property>
		<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
		<property name="connection.url">jdbc:hsqldb:file:C:\Agenda\</property>
		<property name="connection.username">sa</property>
		<property name="connection.password"></property>
		<property name="connection.pool_size">1</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<mapping resource="Contact.hbm.xml" />
	</session-factory>
</hibernate-configuration>
	public void testHibernateSettings() throws Exception {
		SessionFactory factory = new Configuration().configure().buildSessionFactory();
		Session session = factory.openSession();
		Contact contact = new Contact(null, "rubem", "rubem.azenha@gmail.com","3255-3694", "Rua Presidente Bernardes, 762", "asdasd");
		Transaction transaction = session.beginTransaction();
		session.save(contact);
		transaction.commit();
		
		System.out.println(session.createCriteria(Contact.class).list());
		session.close();
		factory.close();
	}

Valeu…

Se eh so pra testes, pq vc nao poe o HSQLDB em memoria?

E… pq esse teste nao tem nenhuma assertion? :?

O problema do lock tu nao deve ta dando shutdown no banco o que é necessario no HSQLDB.

]['s

CV: esse teste eh para ver se funciona Hibernate+HSQL Standalone. Se nao der nenhuma exception, o teste passou :stuck_out_tongue:

Fabio: valeu a dica… vou testar

Não estou entendendo muito a duvida??? O Hibernate não foi feito especificamente para Web e muito menos para bancos distribuidos!! Ele simplesmente faz a ponte entre sua aplicacao e o BD, esteja o BD na mesma maquina da aplicação ou não!!!
Só se o problema for com o HSQLDB!!!

Se você quer ter N conexões simultâneas ao HSQLDB, pode tentar o modo “server”.
Recomendo usar a versão 1.8 ou posterior; a 1.7 está terrivelmente bugada, tanto é que o pessoal do OpenOffice teve de tirar um verdadeiro caminhão de bugs do HSQLDB.

Thingol, a apliacao eh desktop, nao vai ter problemas com concorrencia.
O que eu quero saber eh se tem alguma limitacao para utilizar hibernate + HSQLDB Standalone.

aqui também não teve jeito, tá me dando raiva já! grrr

Testei de tudo quanto é jeito, essa merda NÃO GRAVA de jeito nenhum, já botei shutdown no xml do hibernate (connection.shutdown=true), já botei na string de conexão (STRINGCONEXÃO;shutdown=true) e não teve jeito, commit não tá dando certo

Agora é assim, por exemplo, utilizando um jcreator ou eclipse sem hibernate utilizando standalone, pra gravar, você precisa executar o comando “shutdown” OU se tiver na string de conexão o “shutdown=true” você precisa dar close na conexão pra funcionar

tá foda mesmo

Também tive esse problema com o hibernate + HSQLDB, mas ao colocar a string shutdown=true tudo funciona “bem”.
Já ligou o log4j do hibernate pra ver se dá algum problema? Ele não estaria por dropando as tables (hbm2ddl.auto = create)?

Em ultimo caso ja tentou usar o Derby como db standalone?

ainda por cima peguei o source da javamagazine 28, by the way, essa parada de auto create eu não entendi muito bem… Não é uma parada de schema?

e acho que vou ter que apelar pro derby =[

bom, vou tentar por essa parada do schema pra ver se muda alguma coisa

com schema não deu certo =[

quando uso create, os dados que já estão no banco de dados não aparecem, ou seja, num mesmo programa eu crio o objeto, salvo e depois dou um select, daí ele aparece. Quando eu tento abrir somente para ler os dados, ele não acha NADA

mas que azar hein

Nao não não, você entendeu errado minha pergunta.

Com create o Hibernate faz drop de todas as tables na inicialização.

Perguntei se você estava usando create pois isso poderia causar o problema que você está enfrentando (quando o programa está rodando o commit funciona e os dados são “persistidos”, quando você fecha e roda novamente os dados foram perdidos).

hm eu não sabia disso hehe

mas dah nada, eu já migrei pra derby, achei bem mais legal e funciona o standalone tranquilo

gg hsql

Olá a todos,

Eu achei uma resposta em:

http://forum.hibernate.org/viewtopic.php?t=953676&highlight=hsqldb+save+standalone

Eu utilizei o comando:

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

E funcionou comigo.

Um abraço.

comigo funciona desse jeito (linha com a string de conexão):

jdbc:hsqldb:data/basedados;shutdown=true

acho que de resto está ok, testa aí e nos avisa…

Sei que o topico é antigo.
Porem estava no Google procurando sobre:

  1. por que não é preciso usar Dialect no HSQL?
  2. por que não o tipo de transaction precisa ser o RESOURCE_LOCAL?

E vi parar aqui. Fiz muitos testes aqui e nenhum momento meus dados deixaram de ser salvos.

Qual versão vocês estao usando?
Pergunto isso, porque uso a ultima versao ( 1.8.0.8 )
E nao preciso colocar ;shutdown=true e nem SET WRITE_DELAY 0 MILLIS (*.script) para a persistencia dos dados serem concluidas com sucesso.

Estou usando o Hibernate como implementação do JPA.

verifique o link do tutorial

INSTALANDO HSQLDB STANDALONE EM 8 PASSOS.

https://www.soujava.org.br/display/v/INSTALANDO+HSQLDB+STANDALONE+EM+8+PASSOS.