Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理现有JPA持久性类中的更新的策略_Java_Jpa_Ejb_Data Migration - Fatal编程技术网

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

Java 处理现有JPA持久性类中的更新的策略,java,jpa,ejb,data-migration,Java,Jpa,Ejb,Data Migration,我们正在做一个计划使用JPA持久性的项目。我们认为,一旦项目上线,就很可能需要对数据模型进行更改 我的问题是,有什么不同的策略可以处理这种变化。我特别有以下问题: 对于更新的JPA类,将它们合并到现有数据库模式中的最佳实践是什么 对于JPA,是否有任何最佳实践来归档旧数据、更新数据库模式,然后再次将数据库迁移到新模式 什么样的变化(广义地说)会使这种迁移变得不可能 在RHQ()中,我们有一些dbutil,它们有一个XML模式描述,用于填充空数据库上的初始模式,然后是另一个XML文件,该文件将对该

我们正在做一个计划使用JPA持久性的项目。我们认为,一旦项目上线,就很可能需要对数据模型进行更改

我的问题是,有什么不同的策略可以处理这种变化。我特别有以下问题:

  • 对于更新的JPA类,将它们合并到现有数据库模式中的最佳实践是什么

  • 对于JPA,是否有任何最佳实践来归档旧数据、更新数据库模式,然后再次将数据库迁移到新模式

  • 什么样的变化(广义地说)会使这种迁移变得不可能

  • 在RHQ()中,我们有一些dbutil,它们有一个XML模式描述,用于填充空数据库上的初始模式,然后是另一个XML文件,该文件将对该基本模式的更改注册为DDL和DML语句的单个“差异”

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

    此dbutils代码可用


    还有其他类似的框架可以帮助您解决此问题。

    您也可以查看此框架:

    广告名为:“面向Java的敏捷数据库迁移框架”

    根据我的经验,迁移不是问题所在(hibernate可以自动完成),但如果您处理的是破坏性的更改,回滚就是问题所在。例如,如果删除列,则无法回滚该更改,除非将该列中的数据备份到某个位置。最好的备份方式可能取决于您的数据库供应商