如何升级使用ORM工具构建的数据库模式?

我正在寻找使用ORM工具升级数据库模式的通用解决方案,如JPOX或Hibernate。 你是如何在你的项目中做到的?

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

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

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

我不明白为什么ORM生成的模式与其他数据库模式有任何不同 – 问题是相同的。 假设您的ORM将吐出生成脚本,您可以使用外部工具来执行diff

我没试过,但谷歌回来用SQLCompare作为一个选项 – 我敢肯定还有其他选择。

我们处理SQL更新脚本代码,我们拆除架构并使用更新脚本重建它,作为我们持续构建过程的一部分。 如果任何hibernate映射与模式不匹配,则构建将失败。

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

您可以检查某些数据库架构升级工具的此function比较 。

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

  • mybatis (1049个问题)
  • Liquibase (663个问题)
  • Flyway (标有400个问题)
  • DBDeploy (标记24个问题)。

我认为最好的办法是使用包含SubSonic等数据库迁移的ORM工具:

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

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

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

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