2011-02-15 50 views
6

我們正在執行一個計劃使用JPA持久性的項目。我們認爲,一旦項目開始實施,數據模型可能需要改變的可能性很小。在現有JPA持久性類中處理更新的策略

我的查詢是,有什麼不同的策略可用來處理這種變化。特別是我有以下問題:

  1. 使用更新的JPA類,將它們合併到現有數據庫模式中的最佳實踐是什麼?

  2. 對於JPA,是否有任何最佳實踐來歸檔舊數據,更新數據庫模式,並再次將數據庫遷移到新模式?

  3. 什麼是各種改變(廣義而言)會導致這種遷移不可能?

回答

1

在RHQ(http://rhq-project.org/)我們有一些dbutils具有在XML架構的描述,其用於填充一個空的數據庫上的初始模式,然後,其登記更改此基礎架構作爲單獨的「diff文件另一個XML文件「的DDL和DML語句。

無論何時更改JPA類(以與模式相關的方式),都會更新這兩個XML文件。在安裝程序的下一次運行中,它將查看現有數據庫,收集其版本,然後將數據庫中的版本的所有更新步驟播放到最新的版本。

此dbutils代碼可用in git

還有其他的框架,像liquibase可以幫助你在這裏。

1

您也可以看看這個框架: http://flywaydb.org

宣傳爲:「用於Java的敏捷數據庫遷移框架」

根據我的經驗,遷移都沒有問題(Hibernate可以做他們自動),但回滾是,如果你正在處理破壞性的變化。例如,如果您刪除列,則無法回滾該更改,除非將該列中的數據備份到某個位置。這種備份的最佳方式可能取決於您的數據庫供應商。