0

我们开发和支持使用 Hibernate 作为对象关系映射工具的应用程序,以将我们的 Java 对象持久保存到数据库中。不幸的是,OurApp 1.0 和 OurApp 2.0 之间的对象模型以及数据库架构发生了一些变化。因此,我们想编写一个自动化工具,将数据从使用 OurApp 1.0 的客户数据库迁移到具有与 OurApp 2.0 匹配的模式的新数据库。

我们正在考虑创建一个工具,该工具具有每个 Java 类的两个版本。例如,我们可能有一个与出现在 OurApp 1.0 中的 MyObject 类匹配的 Java 类 MyObject_1_0 和一个与出现在 OurApp 2.0 中的 MyObject 类匹配的 MyObject_2_0。然后我们将编写知道如何将 MyObject_1_0 转换为 MyObject_2_0 的代码。

但是,这不是我以前做过的事情,我想知道这是否是最好的方法。如果我能回顾一些关于最佳实践和常见陷阱的文献和研究,那就太好了。在我们研究最有效的方法时,任何人都可以推荐我可能觉得有用的书籍或文章吗?

谢谢!

4

2 回答 2

2

我们正在考虑创建一个工具,该工具具有每个 Java 类的两个版本。例如,我们可能有一个与出现在 OurApp 1.0 中的 MyObject 类匹配的 Java 类 MyObject_1_0 和一个与出现在 OurApp 2.0 中的 MyObject 类匹配的 MyObject_2_0。然后我们将编写知道如何将 MyObject_1_0 转换为 MyObject_2_0 的代码。

正如 Peter 所建议的那样,我确实会考虑使用数据库迁移工具,这应该会更有效率,而且最终的工作量也会更少,正如我们将看到的那样。而且由于目标数据库不在您的控制之下,我会寻找一种允许以与数据库无关的方式描述更改的东西,例如使用 XML 的liquibase 。

支持liquibase的另一个论点是它提供了Hibernate 集成,这是您的场景的杀手级功能:它可以通过将实体的新映射(XML 或注释)与数据库进行比较来生成迁移脚本。即使结果需要一些调整,这也应该大大简化工作。从文档中:

Hibernate 集成(自 1.6 起)

LiquiBase-Hibernate 是 Hibernatehbm2ddl 功能的替代品。

LiquiBase 相对于 hbm2ddl 的优势

虽然 hbm2ddl 通常可以工作,但它基本上是一个数据库差异工具,因此具有与数据库差异工具相关的所有问题。

LiquiBase-Hibernate 集成将当前 Hibernate 映射所需的数据库更改记录到更改日志文件中,然后您可以在执行之前根据需要检查和修改该文件。开发过程

将 Hibernate 与 LiquiBase 一起使用包括以下步骤:

  1. 对 Hibernate 映射的对象进行必要的更改
  2. 在 Hibernate 配置文件和开发数据库之间运行 diffChangeLog(请参见下面的示例)
  3. 检查和修改新的变更集(如果需要)
  4. 使用新更改更新您的数据库

您可以为所有受支持的数据库提供 SQL 脚本,或者简单地将工具包装在一些 Ant 构建中。

这也是在您的开发过程中采用这种工具的机会。

于 2010-08-28T00:52:39.983 回答
0

我首先建议查看dbMigrateliquiBase,也许还有dbMaintain

这些库和工具是专门为进行模式迁移而构建的。他们使用不同的方法。

它们可能是您解决方案的一部分,甚至本身就足够了。

于 2010-08-27T17:26:37.763 回答