2011-02-15 24 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可以做他们自动),但回滚是,如果你正在处理破坏性的变化。例如,如果您删除列,则无法回滚该更改,除非将该列中的数据备份到某个位置。这种备份的最佳方式可能取决于您的数据库供应商。