应用程序结束后具有 Hibernate 的 HSQLDB 不保存记录

Posted

技术标签:

【中文标题】应用程序结束后具有 Hibernate 的 HSQLDB 不保存记录【英文标题】:HSQLDB with Hibernate not saving records after application end 【发布时间】:2012-05-09 16:59:33 【问题描述】:

我有一个示例应用程序,它加载 2 条记录 ro 数据库,然后从数据库中获取所有记录并打印每条记录的信息。

我的问题如下:当我运行程序时,它只获取在此运行时插入的记录,而不是之前插入的记录,另外,当我用 SQirrel 打开数据库时,没有这样的数据库。

这是我的 Hibernate 配置:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:hibertest</property>
        <property name="connection.username">sk</property>
        <property name="connection.password">0000</property>
        <property name="show_sql">true</property>
        <property name="current_session_context_class">thread</property>
        <property name="hbm2ddl.auto">update</property>

        <mapping class="models.Work" />
    </session-factory>
</hibernate-configuration>

我做错了什么?

【问题讨论】:

【参考方案1】:

我对 HSQLDB 没有经验,但请尝试以下 URL:

<property name="connection.url">jdbc:hsqldb:file:hibertest;shutdown=true</property>

请参阅:Connection URL documentation。

【讨论】:

这是同一 URL(文件数据库)的另一种形式。有关在 URL 上使用的其他属性,请参阅此内容。***.com/questions/10238399/… @Tomasz 请将持久性所需的额外属性添加到您的答案中。请参阅我发布的链接。 @fredt:请随时编辑我的答案。你有足够的回购来做到这一点。或者创建另一个答案。【参考方案2】:

我相信 hsqldb 的默认配置是不为创建的表在磁盘上保存数据。请查看 hsqldb 文档以了解如何更改此行为并使表持久化。

http://hsqldb.org/doc/guide/guide.html#sgc_persist_tables

【讨论】:

【参考方案3】:

所有提供的答案都对我没有帮助。 目前我使用 HSQLDB-2.3.2 和 hibernate-core-3.5.6 和 annotations-3.2.0

除了 Tomasz 的回答,我还需要手动编辑数据库脚本文件设置:

SET WRITE_DELAY 0

【讨论】:

【参考方案4】:

您可以通过执行以下操作使用 HSQL 持久化数据, 1.

 Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");

“/opt/db/testdb”这里是磁盘中的数据库位置。 2.CREATE **TEXT** TABLE &lt;tablename&gt; (&lt;column definition&gt; [&lt;constraint definition&gt;]) 3. 为表格分配来源SET TABLE mytable SOURCE "myfile;fs=|"

参考:http://hsqldb.org/doc/2.0/guide/texttables-chapt.html

我的 Github 存储库显示示例 https://github.com/Ayyamperumal/HSQL/tree/master/SampleHSQLdb

您可以使用 Eclipse 中的“数据库开发”透视图来查看数据。 (提供 hsql jar 作为驱动)或者从 hsqldb-*.jar 中执行 org.hsqldb.util.DatabaseManager 以获取查看数据的 GUI。

【讨论】:

以上是关于应用程序结束后具有 Hibernate 的 HSQLDB 不保存记录的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate_三大状态

Hibernate Session缓存

Hibernate一级缓存

Hibernate:具有两个不同的 ManyToOne 关系的子表

Hibernate 查询以 SQL 语法错误结束

持久化后 Hibernate 集合为 NULL