2008-09-15 52 views
5

我正在尋找使用ORM工具(如JPOX或Hibernate)升級數據庫模式的通用解決方案。你如何在你的項目中做到這一點?如何升級使用ORM工具構建的數據庫模式?

我想到的第一個解決方案是創建我自己的升級數據庫的機制,使用SQL腳本完成所有工作。但在這種情況下,我必須記住每次更新對象映射時都要創建新的腳本。我仍然需要處理低級別的SQL查詢,而不是僅僅定義映射,並允許ORM工具完成所有工作......

所以問題是如何正確地做到這一點。也許有些工具可以簡化這個任務(例如,我聽說Rails內置這樣的機制),如果有的話,請幫我決定爲我的下一個Java項目選擇哪種ORM工具。

回答

7

LiquiBase是一個有趣的開源庫,用於處理數據庫重構(升級)。我沒有使用它,但一定會嘗試我的下一個項目,我需要升級數據庫模式。

0

我們結束了我們每一個改變數據庫時進行更新腳本。因此,有一個從版本10到版本11,從版本11到版本12等的腳本。然後,我們可以運行任何連續的腳本集以從現有版本跳到新版本。我們將現有版本存儲在數據庫中,以便在啓動時檢測到這一點。

是的,這涉及數據庫特定的代碼! Hibernate的主要問題之一!

0

使用Hibernate時,我使用從命令行運行的安裝程序類,並具有創建數據庫模式,插入基礎數據和使用SchemaUpdate動態更新數據庫模式的選項。我覺得它非常有用。它還爲我提供了一個放置一次性腳本的地方,這些腳本將在新版本啓動時運行,例如,在現有數據庫表中填充新字段。

2

我不明白爲什麼ORM生成的模式與其他數據庫模式有什麼不同 - 問題是一樣的。假設你的ORM會吐出一代代碼,你可以使用一個外部工具來執行diff

我還沒有嘗試過,但是谷歌回來時使用SQLCompare作爲一個選項 - 我確定還有其他選項。

2

我們手動編寫SQL更新腳本,並拆除模式並使用更新腳本重建它作爲我們持續構建過程的一部分。如果任何hibernate映射與模式不匹配,則構建將失敗。