为了测试我的应用程序,我编写了一个特殊的应用程序-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插件生成的,它从一些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在出现错误时继续执行脚本?
谢谢!
对于我最初的问题,我找到了一种忽略失败的方法:
<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">
如果Hibernate自动生成DDL,为什么不删除脚本:
<jdbc:embedded-database id="dataSource" >
<jdbc:script location="classpath:sql/testData.sql"/>
</jdbc:embedded-database>