如何升级使用ORM工具构建的数据库模式?
题
我正在寻找使用 ORM 工具(例如 JPOX 或 Hibernate)升级数据库架构的通用解决方案。您在项目中是如何做到的?
我想到的第一个解决方案是创建自己的数据库升级机制,并使用 SQL 脚本完成所有工作。但在这种情况下,我必须记住每次更新对象映射时都要创建新脚本。而且我仍然需要处理低级 SQL 查询,而不仅仅是定义映射并允许 ORM 工具完成所有工作...
所以问题是如何正确地做到这一点。也许有些工具可以简化这个任务(例如,我听说 Rails 内置了这样的机制),如果是这样,请帮助我决定为我的下一个 Java 项目选择哪个 ORM 工具。
解决方案
液体基地 是一个有趣的开源库,用于处理数据库重构(升级)。我还没有使用过它,但肯定会在我需要升级数据库模式的下一个项目中尝试一下。
其他提示
我不明白为什么 ORM 生成的模式与其他数据库模式有任何不同 - 问题是相同的。假设你的 ORM 会生成一个生成脚本,你可以使用外部工具来进行比较
我没试过,但谷歌回来了 SQL比较 作为一种选择 - 我确信还有其他选择。
我们手工编写 SQL 更新脚本,并拆除架构并应用更新脚本重建它,作为我们持续构建过程的一部分。如果任何 hibernate 映射与架构不匹配,构建将会失败。
数据库维护 也可以在这里提供帮助。
我认为你最好的选择是使用包含数据库迁移的 ORM 工具,例如 亚音速:
http://subsonicproject.com/2-1-pakala/subsonic-using-migrations/
每次更改数据库时,我们最终都会制作更新脚本。所以有一个版本10到11、11到12等的脚本。然后我们可以运行任何连续的脚本集以从某个现有版本跳到新版本。我们将现有版本存储在数据库中,以便我们可以在启动时检测到这一点。
是的,这涉及数据库特定的代码!Hibernate 的主要问题之一!
使用 Hibernate 时,我使用一个从命令行运行的安装程序类,并具有用于创建数据库模式、插入基础数据以及使用以下命令动态更新数据库模式的选项: 架构更新. 。我发现它非常有用。它还为我提供了一个放置一次性脚本的位置,这些脚本将在新版本启动时运行,例如填充现有数据库表中的新字段。