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