2013-12-16 101 views
4

时为了测试我的应用程序停止错误我wrotte一个特殊的应用程序上下文的test.xml 我想使用一个内部HSQLDB作为这样的数据源:防止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的插件生成,并与一些下降的约束和表像这样开始:当init.sql加载失败,当然与错误

alter table t_menu 
     drop constraint fk_menu_menu; 

所以:

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

所以你告诉休眠自动生成DDL? –

回答

0

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

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

好的,我应该想到它... – jpprade

+0

aw现在工作,因为它试图在hibernate创建表之前执行脚本:(。我需要另一种方式来初始化我的db – jpprade

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