2010-08-19 48 views
2

我有一個輕量級的liquibase和hibernate的問題。我希望hibernate在創建hbm2ddl時創建模式,然後讓liquibase用sql腳本文件來監測數據庫。
我注意到,當驗證它的行爲如描述和創建它不 特別是在使用hsqldb(在內存中)的測試環境。我似乎是盲目的。hibernate hbm2ddl create有沒有liquibase問題?

有沒有辦法讓hsqldb有我的預期工作,就像在通過休眠創建數據庫之後填充數據庫一樣。感謝您閱讀本文。

+0

liquibase應該如何在您的設置中被觸發? – 2010-08-19 23:33:11

+0

嗨,帕斯卡!這有點「複雜的體系結構」,但我會盡我所能解釋。 它是一個'3子項目'''dblayer','servicelayer'和'webapp'.so的'maven + spring + hibernate'項目,讓我們說測試類的'testdbconfig'上下文,並且有一個真正的'dbconfig'由webapp使用。 'dblayer'做數據庫的東西,所以我在'spring'中使用liquibase。'testdbconfig'從資源文件夾(dblayer項目)中的屬性文件中選擇屬性,並且出於某種原因使用'testdbconfig + liquibase + hsqldb + hbm2ddl = create'工作來構建dblayer。 – 2010-08-20 09:57:59

+0

所有的'modules'(db + service)都在webapp pom中,所以它們的上下文被導入到'webbappconfig'中。集成測試是在真實的配置下運行的,這些配置腳本在webapps.building中也有一個maven命令運行使用真正的配置集成測試。在Web應用程序相同的屬性文件中的dbconfig(不testconfig),如在testconfig'dbconfig + liquibase + hsqldb + hbm2ddl = create'似乎不會影響分貝,所以我的集成測試failed.tried與MySQL和它只驗證,讓數據populated.Did我做了一個很好的解釋?感謝您閱讀這 – 2010-08-20 10:16:06

回答

3

Liquibase最適合用作hbm2ddl的替代品。這樣,當數據庫處於適合該數據的狀態時,可以讓數據總體發生,隨後的更改集可以將插入的數據與其他更改一起升級。如果您先運行hbm2ddl,然後使用liquibase填充數據,則需要始終對插入數據結構進行更改。

您可以使用hibernate和liquibase的一種方式是在開發過程中使用ant或maven下的liquibase diff工具,根據您的數據庫和hibernate模型之間的差異追加到您的更改日誌文件。確保你檢查它想要做什麼,因爲它不總是你期望的(它決定放棄並添加一列而不是重命名它)。例如,一旦創建了更新日誌文件,您就可以像在任何更新日誌文件中一樣將它運行到應用程序啓動時的liquibase spring bean上來運行它。您不需要同時使用hbm2ddl和liquibase,因爲liquibase使用hbm2ddl來生成liquibase比較當前數據庫的hibernate「數據庫」。

有了這個,你的步驟是:

  1. 對您的休眠模式
  2. 運行liquibase休眠之間差異的變化和現有的數據庫
  3. 檢查你的新liquibase變更
  4. 執行您liquibase腳本針對數據庫

唯一的問題可能是hibernate差異太大在maven中可能不支持它,例如在ant和命令行中,特別是在1.9中。

如果您不想處理liquibase diff工具,則可以隨時將changeSets附加到更改日誌文件,以便手動進行每項更改。 XML格式被設計爲易於手動使用。在這種情況下,你的步驟是:

  1. 修改您的休眠模式
  2. 添加需要變更到你的changelog文件
  3. 執行您liquibase腳本對數據庫
  4. 測試和重複
+0

謝謝彌敦道! 我現在得到漂移了。這就是我現在正在做的事情。我從sping上下文中刪除了hbm2ddl。然後我包含模式更改日誌以創建表,然後包含包含插入語句(和csv文件)的更改日誌, .works完美。謝謝大家非常感謝 – 2010-08-21 20:51:46

相關問題