小编典典

HSQLDB和Hibernate / JPA-无法持久保存到磁盘吗?

hibernate

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相关的状态太多,以至于不清楚确切的含义。


阅读 281

收藏
2020-06-20

共1个答案

小编典典

有谁知道为什么对象无法在单个JVM会话之后无法持久化?

HSQLDB不会在提交后立即将更改写入磁盘(请参阅“ WRITE
DELAY

”),默认情况下HSQLDB并非持久性的(这就是“性能”的来源)。

尝试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

jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false
2020-06-20