HSQL和Hibernate的新手知识…
em.getTransaction().begin(); for (Activity theActivity : activities) { em.persist(theActivity); } em.getTransaction().commit(); em.close();
其次是…
EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); System.out.println("QUERY:: " + em.createQuery("SELECT COUNT(*) FROM " + Activity.class.getName()).getSingleResult() .toString()); em.getTransaction().commit();
打印25000(活动中的“活动”对象的数量)。但是,当我再次运行此测试时,count(*)中的对象数量并没有增加(在程序开始时为0)。因此,不会持久地写入对象。
这是我的hsqldb连接字符串:
name="hibernate.connection.url" value="jdbc:hsqldb:file:data/cmon"
据我所知它不是内存数据库…
有谁知道为什么对象无法在单个JVM会话之后无法持久化?乐于提供更多信息,但是与Hibernate / JPA / HSQL相关的状态太多,以至于不清楚确切的含义。
有谁知道为什么对象无法在单个JVM会话之后无法持久化?
HSQLDB不会在提交后立即将更改写入磁盘(请参阅“ WRITE DELAY ”),默认情况下HSQLDB并非持久性的(这就是“性能”的来源)。
尝试shutdown=true在连接字符串中设置连接属性,以获取在最后一个连接结束时写入的更改。
shutdown=true
jdbc:hsqldb:file:data/cmon;shutdown=true
如果没有帮助,请尝试将WRITE DELAY设置为0(或false)。如果您使用的是HSQLDB 1.8.x,请使用SQL命令:
SET WRITE_DELAY 0
如果您使用的是HSQLDB 2.0.x,现在还可以使用connection 属性 hsqldb.write_delay:
hsqldb.write_delay
jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false