Something of an novice with HSQL and Hibernate...
em.getTransaction().begin();
for (Activity theActivity : activities) {
em.persist(theActivity);
}
em.getTransaction().commit();
em.close();
followed by...
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
System.out.println("QUERY:: "
+ em.createQuery("SELECT COUNT(*) FROM " + Activity.class.getName()).getSingleResult()
.toString());
em.getTransaction().commit();
Prints 25000 (the number of Activity objects in activities). But when I run this test again, the number of objects in the count(*) doesn't increase (and is 0 at the beginning of the program). So the objects aren't getting durably written.
This is my hsqldb connection string:
name="hibernate.connection.url" value="jdbc:hsqldb:file:data/cmon"
so it's not an in-memory database as far as I know...
Does anyone have any ideas why the objects aren't getting persisted beyond a single JVM session? Happy to supply more information but there's so much state associated with Hibernate / JPA / HSQL that it's not clear exactly what is pertinent.
Does anyone have any ideas why the objects aren't getting persisted beyond a single JVM session?
HSQLDB doesn't write changes immediately to disk after a commit (see "WRITE DELAY"), HSQLDB is not Durable by default (that's from where "performances" are coming from).
Either try to set the connection property shutdown=true in the connection string to get the changes written when the last connection will end.
jdbc:hsqldb:file:data/cmon;shutdown=true
If it doesn't help, try to set the WRITE DELAY to 0 (or false). If you're using HSQLDB 1.8.x, use the SQL command:
SET WRITE_DELAY 0
If you're using HSQLDB 2.0.x, you can now also use a connection property hsqldb.write_delay:
jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false
The solution is :
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>
in hibernate.cfg.xml
This is rest of my configuration:
Libs:
Url:
<property name="connection.url">jdbc:hsqldb:file:data/mydb;shutdown=true;hsqldb.write_delay=false;</property>
Did you set hibernate.hbm2ddl.auto to create-drop in your persistence.xml? This drops your tables and re-creates them on every startup.
You can set it to update instead, or if you want to manage the schema yourself, then set it to validate.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With