HSQLDB和Hibernate / JPA – 没有持久化到磁盘?
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相关的状态如此之多,以至于不清楚究竟是什么相关的。
有没有人有任何想法为什么对象不会持久超过单个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,现在还可以使用连接属性 hsqldb.write_delay
:
jdbc:hsqldb:file:data/cmon;hsqldb.write_delay=false
解决方案是:
org.hibernate.dialect.HSQLDialect
在hibernate.cfg.xml中
这是我配置的其余部分:
库:
- HsqlDb 2.0.0
- Hibernate 3.5.6
url:
jdbc:hsqldb:file:data/mydb;shutdown=true;hsqldb.write_delay=false;
你有没有将hibernate.hbm2ddl.auto
设置为你的persistence.xml中的create-drop
? 这会丢弃您的表并在每次启动时重新创建它们。
您可以将其设置为update
,或者如果您想自己管理架构,则将其设置为validate
。
在提交真正持久化数据之后,只需在filemode中使用HSQL关闭EntityManagerFactory …
我使用的是HSQL DB 2.2.5版。 我试过上面的方法,即设置shutdown = true和hsqldb.write_delay = false它不起作用。 正如一些博客所说,我补充说
org.hsqldb.DatabaseManager.closeDatabases(0);
在事务提交之后。 但它没有用。
HSQL DB版本2.2.9似乎比这更好。 通过一种解决方法,它解决了这个问题。 要处理上述问题,请执行以下步骤: –
1)来自HSQL DB版本2.2.9的lib的hsqldb.jar
2)在hibernate config xml中只指定URL我使用的是基于HSQL文件的数据库。
jdbc:hsqldb:file:D:\JavaProj\TmpDBLocation\myKauDB
3)在你的程序结束时写声明
org.hsqldb.DatabaseManager.closeDatabases(0);
现在运行将数据提交到DB的hibernate程序。
通过以独立模式和URL打开HSQL DB来检查它
jdbc:hsqldb:file:D:\JavaProj\TmpDBLocation\myKauDB
您应该会在DB中看到您的更改仍然存在。
结账会议对我有用 。
- 具有共享主键的两个表之间的OneToOne
- 如何在Tomcat中使用Hibernate支持的JPA运行Spring 3.0 PetClinic
- JPA GROUP BY实体 – 这可能吗?
- 多个数据库的事务管理使用Spring和Hibernate
- 使用Hibernate / JPA和JDK Date进行不需要的自动时区转换
- Hibernate多对一更新外键为null
- org.hibernate.StaleStateException:批量更新从update 返回意外的行数; 实际行数:0; 预期:1
- 为什么建议避免外键上的单向一对多关联?
- JTASessionContext与JDBCTransactionFactory一起使用; 使用getCurrentSession()自动刷新将无法正常运行