Jpa + hsqldb

8 respostas
J

Pessoal

Alguém já utilizou JPA com HSQLDB, em modo Stand-Alone?

Estou precisando utilizar isto e tudo funciona perfeitamente, exceto que, quando eu fecho a aplicação, os dados não persistem.

Se estivesse utilizando o banco com JDBC, poderia executar um commit(), ao final da transação.

Como isto está sendo feito pelo JPA, não tenho esta opção (pelo menos não achei nada a respeito e nem consegui fazer).

Já pesquisei bastante sobre isto, mas nada funcionou.

Alguém sabe como fazer?

Grato

8 Respostas

Renato.Pinheiro

Júlio,

estou com o mesmo problema, você conseguiu achar a solução?

Renato.Pinheiro

Júlio,

lembrei que a muito tempo usei um HSQL em uma aplicação não JPA e nela os dados eram “commitados” (putz), revirei aqui os backups e achei os fontes.

Bom, não sei se essa é a solução ou mesmo se é a melhor, mas funcionou :smiley:

Basta adiciona na URL de conexão o texto: ;shutdown=true , veja como ficou o meu persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="league" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>
    <class>com.sun.demo.jpa.Player</class>
    <class>com.sun.demo.jpa.Team</class>
    <properties>
      <property name="toplink.jdbc.user" value="sa"/>
      <property name="toplink.jdbc.password" value=""/>
      <property name="toplink.jdbc.url" value="jdbc:hsqldb:file:./db/league;shutdown=true"/>
      <property name="toplink.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
      <property name="toplink.target-database" value="HSQL"/>
      <property name="toplink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
</persistence>
dering

Boa noite!
Acho que nesse site a seguir pode ajudar bastante vocês.

http://www.jchico.org/search/label/jpa

Abraço.

71C4700

Boa madruga !!
rsrsrrsrsrsrs
Cara pode ser o forma de persistencia.!!!
Assim, a atualização do banco
“create”, “create-drop”, “update”.
Pode não estar marcada e esta deletando sempre que fecha sua aplicação.!!
Funciona enquanto estar aberta porque ainda esta na memoria e não deu o flush() ainda, que realmente é quem llibera
as transações e persiste-as no banco
Da uma olhada !

Renato.Pinheiro

Mas estou usando CREATE-TABLES, isso não seria suficiente? Ou depois de usar essa tenho que mudar a PU para UPDATE?

Renato.Pinheiro

dering:
Boa noite!
Acho que nesse site a seguir pode ajudar bastante vocês.

http://www.jchico.org/search/label/jpa

Abraço.

Já tinha passado por este site, o problema é que, justamente com o TOPLINK, ele usa MYSQL e não HSQLDB.

71C4700

Acho que sim, é no PU que definimos “as regras do banco”.
Acho que UPDATE resolveria, tive um problema parecido, procurei em todos os lugares e explicações,
quando cai na real, era lá, mudei e pronto resolveu o problema.
Qualquer coisa posta a duvida melhor exemplificada.
Abraços

rael_gc

Para que os dados persistam usando o HSQLDB, você precisa chamar explicitamente o comando “shutdown”.
Colocar ele na URL de conexão NÃO vai funcionar (ou seja, não precisa fazer isso).

Usando JPA, chame uma query nativa e execute o comando “shutdown”. No exemplo abaixo, meu EntityManager foi instanciado com o nome de “dao” (pois com JPA eu não escrevo DAOs):

dao.createNativeQuery("SHUTDOWN").executeUpdate();
Criado 20 de junho de 2008
Ultima resposta 4 de abr. de 2009
Respostas 8
Participantes 5