gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:26:05 30 4
gpt4 key购买 nike

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com