java - HSQLDB 和 Hibernate/JPA - 不持久化到磁盘?

标签 java hibernate jpa hsqldb

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( Activity 中 Activity 对象的数量)。但是当我再次运行这个测试时,count(*) 中的对象数量并没有增加(并且在程序开始时为 0)。所以对象没有被持久写入。

这是我的 hsqldb 连接字符串:

name="hibernate.connection.url" value="jdbc:hsqldb:file:data/cmon"

所以据我所知,它不是内存数据库...

有没有人知道为什么对象在单个 JVM session 之外没有被持久化?很高兴提供更多信息,但是与 Hibernate/JPA/HSQL 相关的状态太多了,不清楚到底什么是相关的。

最佳答案

Does anyone have any ideas why the objects aren't getting persisted beyond a single JVM session?

HSQLDB 不会在提交后立即将更改写入磁盘(请参阅“WRITE DELAY”),默认情况下 HSQLDB 不是 Durable(这是“性能”的来源)。

尝试在连接字符串中设置连接属性 shutdown=true 以获取在最后一个连接结束时写入的更改。

jdbc:hsqldb:file:data/cmon;shutdown=true

如果没有帮助,请尝试设置 WRITE DELAY为 0(或错误)。如果您使用的是 HSQLDB 1.8.x,请使用 SQL 命令:

SET WRITE_DELAY 0

如果您使用的是 HSQLDB 2.0.x,您现在还可以使用连接 property hsqldb.write_delay:

jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false

关于java - HSQLDB 和 Hibernate/JPA - 不持久化到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3551988/

相关文章:

java - 静态内部类如何访问外部类的所有静态数据成员和静态成员函数?

java - Hibernate RevInfo 表 Rev 列达到最大范围,即 2147483647

java - 将 HIbernate 与 Spring 的 @Transactional Annotation 结合使用,数据不会持续存在

java - 在 Hibernate 表中保存 POJO 时发生 hibernate.MappingException

java - 如何从 Java EE 6 中的 JPA2 EntityManager 获取数据源或连接

java - Import Sceneform Asset 选项在使用 OBJ 文件生成 SFB 文件时出错

java - 检查用户是否通过密码验证或使用某些提供商

java - 使用 Java 中的 Google Admin SDK Directory API 为域创建 Gmail 帐户

mysql - 服务器端 Spring + Freemarker + Hibernate(EM) + MySql UTF-8 字符

java - 实体模型或Pojo类作为REST API的返回对象