java - HSQLDB 文件模式不起作用

标签 java spring hibernate hsqldb

我将 HSQLDB 与 Hibernate 5 和 Spring 4 结合使用。

我的 spring-context.xml 中有一些 bean 定义:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

    <jdbc:embedded-database id="dataSource" type="HSQL">
        <jdbc:script location="classpath*:database/database_schema.sql"/>
    </jdbc:embedded-database>

    <beans:bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource"/>
        <beans:property name="configLocation" value="hibernate/hibernate.cfg.xml"/>
        <beans:property name="annotatedClasses">
            <beans:list>
               ...lot of project beans path values..
            </beans:list>
        </beans:property>
    </beans:bean>

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="sessionFactory"/>
    </beans:bean>

Hibernate.cfg.xml 包含:

<?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="hibernate.enable_lazy_load_no_trans">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:file:D/database</property>
        <property name="connection.pool_size">10</property>
        <property name="connection.username">SA</property>
        <property name="connection.password"></property>
    </session-factory>
</hibernate-configuration>

所有 dao 和服务层都工作正常。数据始终保存,一切正常。

但在下次启动时,所有数据将从数据库中删除。

我正在尝试将数据库数据保存在文件中并再次使用该数据,并且我尝试了许多变体。最后一个来自问题about HSQLDB url config

我已将这一行添加到我的 hibernate.cfg.xml 文件中:

 <property name="connection.url">jdbc:hsqldb:file:D/database</property>

这对我没有帮助。该路径下没有创建文件。

我也正在尝试使用 question 的建议并使用 SCRIPT SQL 命令,但我不完全理解如何正确使用它以及我必须将它直接放置在哪里?

问题:我应该如何配置 HSQLDB 以在关闭应用程序后将数据库中的所有数据保存到文件中,并在再次打开此应用程序后重新使用这些数据? 你能针对这个问题编写一些正确的 HSQLDB 配置的小而有效的示例吗?

编辑#1: 谢谢jchampemont,我尝试了你的变体和所有步骤,但仍然没有任何结果。该文件仍然不存在:( 选择了 Hibernate 文件,所有 hibernate 配置都工作正常。

问题已解决!感谢 jchampemont 和 fredt

我忘记删除 hibernate.cfg.xml 中的这些值...:

        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="connection.url">jdbc:hsqldb:file:D:/database.lck</property>
        <property name="connection.pool_size">10</property>
        <property name="connection.username">SA</property>
        <property name="connection.password"></property>

我已经创建了像 jchampemont answer 那样的 bean 数据源 删除这 4 行后 - 一切开始工作正常,在 D:\database 文件夹中创建了基础,一切都很酷。谢谢各位的解答!和平:)

最佳答案

您确定 Spring 正在拾取您的 Hibernate.cfg.xml 吗?根据文件所在的位置,您可能需要在其位置添加 classpath: 前缀。

您还可以执行以下操作来创建 DataSource bean 并指定数据库 URL,而不是使用 jdbc:embedded-database:

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:file:D:/database" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>


<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath*:database/database_schema.sql" />
 </jdbc:initialize-database>

关于java - HSQLDB 文件模式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36443788/

相关文章:

字符类中的 Java Regex 非法转义字符

java - 如何在不将类标记为事务性的情况下测试 dao 层

java - 存储在 ModelMap 中的 HTML 标签不会被浏览器解释为 HTML

json - Spring 3.1.2中带有JAXB批注的注册器MappingJackson2HttpMessageConverter

json - Spring JSON 直接自引用导致循环(无限递归)

java - Hibernate 无法执行 JDBC 批量更新

java - 在 Java 中使用 namespace 创建 XML 文档

java - WatchService Api 文件监视在创建事件中尝试访问文件时抛出异常

java - Struts 中 JSP 中的 Activity 表单是否有通用引用?

java - H2 with MODE=Oracle 导致 'Schema "information_schema"not found'