首页 / 知识

关于Java:如何升级使用ORM工具构建的数据库架构?

2023-04-15 10:28:00

关于Java:如何升级使用ORM工具构建的数据库架构?

How to upgrade database schema built with an ORM tool?

我正在寻找使用ORM工具(例如JPOX或Hibernate)升级数据库架构的通用解决方案。 在项目中如何做?

我想到的第一个解决方案是创建自己的数据库升级机制,并由SQL脚本完成所有工作。 但是在这种情况下,我将不得不记住每次更新对象映射时都要创建新的脚本。 而且,我仍然必须处理低级的SQL查询,而不仅仅是定义映射并允许ORM工具完成所有工作……

所以问题是如何正确执行。 也许某些工具可以简化此任务(例如,我听说Rails内置了这种机制),如果可以,请帮助我确定为我的下一个Java项目选择哪种ORM工具。


LiquiBase是一个有趣的开源库,用于处理数据库重构(升级)。我没有使用过它,但是一定会在需要升级数据库模式的下一个项目中尝试一下。


您可以检查某些数据库模式升级工具的功能比较。

比较一些工具在SOW中的问题数量:

  • mybatis(已标记1049个问题)
  • Liquibase(标记663个问题)
  • 飞路(已标记400个问题)
  • DBDeploy(已标记24个问题)。

我们编写代码SQL更新脚本,然后拆解该架构并应用更新脚本对其进行重建,这是我们持续构建过程的一部分。如果任何休眠映射与架构都不匹配,则构建将失败。


我不明白为什么ORM生成的架构与其他DB架构有什么不同-问题是相同的。假设您的ORM会吐出一个生成脚本,则可以使用外部工具进行比较

我还没有尝试过,但是google将SQLCompare作为一种选择回来了-我敢肯定还有其他选择。


DbMaintain也可以在这里提供帮助。


在使用Hibernate时,我使用一个安装程序类,该类从命令行运行,并且具有用于创建数据库架构,插入基础数据以及使用SchemaUpdate动态更新数据库架构的选项。我发现它非常有用。它还为我提供了放置一次性脚本的位置,这些脚本将在启动新版本时运行,例如,在现有数据库表中填充新字段。


每次更改数据库时,我们都会制作更新脚本。所以有一个脚本,版本从10到11,从11到12,等等。然后我们可以运行任何连续的脚本集,以从现有版本跳到新版本。我们将现有版本存储在数据库中,因此可以在启动时检测到它。

是的,这涉及特定于数据库的代码! Hibernate的主要问题之一!


我认为您最好的选择是使用包含SubSonic这样的数据库迁移的ORM工具:

http://subsonicproject.com/2-1-pakala/subsonic-using-migrations/


升级数据库工具解决方案

最新内容

相关内容

猜你喜欢