【发布时间】:2011-04-02 21:25:47
【问题描述】:
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 对象的数量)。但是当我再次运行这个测试时,count(*) 中的对象数量并没有增加(并且在程序开始时为 0)。所以对象没有被持久写入。
这是我的 hsqldb 连接字符串:
name="hibernate.connection.url" value="jdbc:hsqldb:file:data/cmon"
所以据我所知,它不是内存数据库...
有没有人知道为什么对象在单个 JVM 会话之外没有被持久化?很高兴提供更多信息,但是与 Hibernate / JPA / HSQL 相关的状态太多了,不清楚到底什么是相关的。
【问题讨论】:
-
作为另一个数据点,最后一次运行的INSERT在data/cmon.log中,在启动时被擦除并被替换。也许有一个选项可以在启动时强制重播日志?
-
这意味着记录确实发生了。请报告 .log 和该目录中任何 .script 文件的大小。还有你正在使用的 HSQLDB 版本。
-
@fredt - 休眠 1.8.0。日志的大小约为 4MB,大约 37000 条插入语句。 cmon.script 是 1.9K,奇怪的是以 SET WRITE_DELAY 10 结尾——这使得我对连接字符串的更改看起来不起作用。
-
HSQLDB 1.8.0 不支持连接属性。最新的 Hibernate 3.5.5 (2010.08.18) 版本支持 HSQLDB 2.0.x。从hsqldb.org/support 获取最新的 HSQLDB 2.0.1 快照 jar 并使用 jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=true;shutdown=true
-
@HenryR:你有没有让它工作?我现在正在遇到一模一样的问题。日志被写入,但没有数据。