初始化数据库时,防止hsqldb在出错时停止

时间:2013-12-16 11:00:49

标签: spring hsqldb spring-test

为了测试我的应用程序,我编写了一个特殊的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在出错时继续执行脚本?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

<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">

答案 1 :(得分:0)

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

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