2013-12-16 102 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">