【问题标题】:Prevent hsqldb to stop on error when initializing the database初始化数据库时防止 hsqldb 因错误而停止
【发布时间】:2014-01-03 17:55:21
【问题描述】:

为了测试我的应用程序,我编写了一个特殊的 application-context-test.xml 我想像这样使用内部 hsqldb 作为数据源:

<jdbc:embedded-database id="dataSource" >   
        <jdbc:script location="classpath:sql/init.sql" />
        <jdbc:script location="classpath:sql/testData.sql"/>
</jdbc:embedded-database>

init.sql 由 hibernate3-maven-plugin 生成,并以一些 drop 约束和如下表开始:

alter table t_menu 
        drop constraint fk_menu_menu;

因此,当加载 init.sql 时,它当然会因错误而失败:

Caused by: java.sql.SQLException: Table not found: T_MENU in statement [alter table t_menu]
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)

我可以创建一个特殊的 initTest.sql 脚本,但每次架构更改时我都必须手动更新它。

是否有任何选项告诉 hsql 在出错时继续执行脚本?

谢谢!

【问题讨论】:

  • 所以你让休眠自动生成 DDL?

标签: spring hsqldb spring-test


【解决方案1】:

对于我最初的问题,我找到了一种方法来忽略这样的失败:

<jdbc:initialize-database data-source="dataSource" ignore-failures="ALL">
    <jdbc:script location="classpath:sql/init.sql"/>    
    <jdbc:script location="classpath:sql/testData.sql"/>

</jdbc:initialize-database>

<jdbc:embedded-database id="dataSource" type="HSQL">

【讨论】:

    【解决方案2】:

    如果 Hibernate 自动生成 DDL,为什么不直接删除脚本:

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

    【讨论】:

    • aw 它现在正在工作,因为它尝试在休眠创建表之前执行脚本:(。我需要另一种方法来初始化我的数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多