HSQLDB文件模式不起作用

时间:2016-04-06 07:04:15

标签: 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 dataSource 删除这4行后 - 一切都开始工作正常,基础在D:\ database文件夹中创建,一切都很酷。谢谢你的答案!和平:))

2 个答案:

答案 0 :(得分:1)

你确定你的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>

答案 1 :(得分:0)

我已在我的示例项目中尝试过您的设置,并且HSQL文件JDBC URL工作正常。

我知道问题在于你的JDBC URL链接(D /数据库)。 根据{{​​3}} HSQL将尝试在D驱动器的根目录中创建前缀名为 database 的所有数据库存储文件。像:

d:/database.tmp

d:/database.lck

d:/database.log

d:/database.properties

d:/database.script

我认为权限可能存在一些问题。

尝试更改为D / database / test-db之类的内容。