处理现有JPA持久性类中的更新的策略

时间:2011-02-15 13:34:32

标签: java jpa ejb data-migration

我们正在做一个我们计划使用JPA Persistence的项目。我们认为,一旦项目投入使用,可能需要更改数据模型。

我的疑问是,有哪些不同的策略可用于处理此类更改。特别是我有以下问题:

  1. 使用更新的JPA类,将它们合并到现有数据库模式中的最佳做法是什么?

  2. 使用JPA,是否有最佳实践,存档旧数据,更新数据库架构,并再次将数据库迁移到新架构?

  3. 有哪些变化(一般来说)会导致无法进行此类迁移?

2 个答案:

答案 0 :(得分:1)

在RHQ(http://rhq-project.org/)中,我们有一些dbutils,它们在XML中有一个模式描述,用于填充空数据库上的初始模式,然后是另一个xml文件,它将对此基本模式的更改注册为单独的“差异” “DDL和DML声明。

每当更改JPA类时(以架构相关方式),都会更新两个XML文件。在下次运行安装程序时,它将查看现有数据库,收集其版本,然后播放从DB中的版本到最新版本的所有更新步骤。

此dbutils代码可用in git

还有其他类似liquibase的框架可以帮到你。

答案 1 :(得分:1)

您还可以查看此框架: http://flywaydb.org

宣传为:“Java的敏捷数据库迁移框架”

根据我的经验,迁移不是问题(hibernate可以自动执行),但如果您正在处理破坏性更改,则回滚就是这样。例如,如果删除列,则无法回滚该更改,除非您在某处备份了该列中的数据。这种备份的最佳方式可能取决于您的数据库供应商。