7

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

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

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

4

8 回答 8

7

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

于 2008-09-15T16:53:08.423 回答
2

我不明白为什么 ORM 生成的模式与其他数据库模式有任何不同——问题是一样的。假设你的 ORM 会输出一个生成脚本,你可以使用外部工具来做 diff

我没有尝试过,但谷歌返回SQLCompare作为一种选择——我相信还有其他选择。

于 2008-09-15T16:13:22.047 回答
2

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

于 2008-10-02T15:17:51.923 回答
2

您可以查看一些数据库架构升级工具的此功能比较

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

  • mybatis(已标记 1049 个问题)
  • Liquibase(已标记 663 个问题)
  • Flyway(标记了 400 个问题)
  • DBDeploy(标记了 24 个问题)。
于 2015-01-20T21:37:04.297 回答
1

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

于 2011-02-27T09:22:55.877 回答
0

我认为您最好的选择是使用包含数据库迁移的 ORM 工具,例如SubSonic

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

于 2008-09-15T15:54:46.443 回答
0

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

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

于 2008-09-15T15:55:26.643 回答
0

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

于 2008-09-15T16:02:27.203 回答