【问题标题】:HSQL file based database from script来自脚本的基于 HSQL 文件的数据库
【发布时间】:2015-11-13 20:55:08
【问题描述】:

我有一个问题。我在玩 JSF/Spring/Hibernate 和 HSQL。 为此,我有一个小型测试应用程序,并且对于我想要实现的一个功能,我需要一个保存一些数据的可能性。我不想拥有一个成熟的数据库,所以我选择了 HSQL。从本教程 (http://devcrumb.com/hibernate/hibernate-jpa-spring-and-hsqldb) 开始,我构建了我的应用程序。我在数据类型方面遇到了一些问题,我选择从脚本构建我的数据库。

就像在教程中一样,我在 application.xml 中定义了这样的数据源,除了我更改了 url 属性以使用文件。

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>org.hsqldb.jdbcDriver</value>
        </property>
        <property name="url">
            <value>jdbc:hsqldb:hsql://localhost/testdb</value>
        </property>
        <property name="username">
            <value>sa</value>
        </property>
        <property name="password">
            <value></value>
        </property>
    </bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="persistenceUnitName" value="jpaData" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>

现在,我已将数据源更改为如下内容:

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

到目前为止一切正常。 我的问题是,当服务器关闭时,该数据库被删除。是否有可能同时使用两者?一个脚本作为我的数据库结构的基础,但数据库本身被写入我的文件系统上的一个文件,以便在服务器重新启动后它可用?我知道可能有一些解决方案可以通过一些代码来实现这一点,但是是否有可能以这种方式进行配置?

提前致谢

【问题讨论】:

    标签: java spring hibernate jpa hsqldb


    【解决方案1】:

    实际上,对于您的情况,您使用的是 hsqldb in-memory 模式,spring 确实是一个 inmemory 数据库。要重用文件数据库,您需要更新 hsqldb 模式以使用“进程内模式”,如“jdbc:hsqldb:file:testdb”

    一个样题是Embedded HSQLDB persist data to a file,你可以参考这个。

    【讨论】:

    • jdbc:initialize-database 标签实际上是我需要的。有了它,我可以从脚本创建我的数据库。唯一奇怪的是,在创建它们之前我必须在我的脚本中删除这些表,并且在创建数据库之后我必须从 application.context.xml 中删除 jdbc:initialize-database 标记,否则会出现错误我的表已经存在的消息。从我的角度来看,这不是最好的解决方案,但对于这种情况,它是可以的。
    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2023-01-09
    • 2021-12-29
    相关资源
    最近更新 更多