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

16 respostas
Rubem_Azenha

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", "[email removido]","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…

16 Respostas

cv1

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

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

F

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

]['s

Rubem_Azenha

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

fredferrao

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!!!

T

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.

Rubem_Azenha

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.

Leozin

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

grprado

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?

Leozin

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

Leozin

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

grprado

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).

Leozin

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

J

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.

J

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…

A

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.

bebad

verifique o link do tutorial

INSTALANDO HSQLDB STANDALONE EM 8 PASSOS.

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

Criado 2 de abril de 2006
Ultima resposta 21 de jan. de 2009
Respostas 16
Participantes 11