将嵌入式HSQL数据库保存到文件

时间:2013-11-26 09:56:14

标签: java spring hibernate hsqldb

为了记录和调试,我想将嵌入式/内存中的HSQL数据库转储到文件中。架构+数据。我正在使用带有休眠的spring-framework。

我试过了两个:

    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransaction();

    session.createSQLQuery("BACKUP DATABASE TO '/tmp/backup.tar.gz' BLOCKING");

    transaction.commit();
    session.close();

    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransaction();

    session.createSQLQuery("SCRIPT '/tmp/backup-data.sql'");

    transaction.commit();
    session.close();

两者都无济于事。

没有特殊配置。

Hibernate配置:

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

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
      p:dataSource-ref="dataSource">
    <property name="packagesToScan" value="com.domain.*.model"/>
    <property name="hibernateProperties">
        <value>
            hibernate.format_sql=true
            hibernate.dialect=org.hibernate.dialect.HSQLDialect
        </value>
    </property>
</bean>

我错过了什么,我是否需要一种不同的方法,是否可能?

2 个答案:

答案 0 :(得分:3)

您的代码仅创建SQLQuery的实例并将其抛弃。您没有执行查询。

添加/更改为以下

SQLQuery query = session.createSQLQuery("BACKUP DATABASE TO '/tmp/backup.tar.gz' BLOCKING");
query.executeUpdate();

这将执行查询。

答案 1 :(得分:0)

你试过了吗?

Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();

session.createSQLQuery("BACKUP DATABASE TO '/tmp/' BLOCKING");

transaction.commit();
session.close();

根据documentation您需要提供目录,HSQL将在其中创建tar.gz文件。