2008-09-15 54 views
5

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

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

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

回答

7

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

0

我们结束了我们每一个改变数据库时进行更新脚本。因此,有一个从版本10到版本11,从版本11到版本12等的脚本。然后,我们可以运行任何连续的脚本集以从现有版本跳到新版本。我们将现有版本存储在数据库中,以便在启动时检测到这一点。

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

0

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

2

我不明白为什么ORM生成的模式与其他数据库模式有什么不同 - 问题是一样的。假设你的ORM会吐出一代代码,你可以使用一个外部工具来执行diff

我还没有尝试过,但是谷歌回来时使用SQLCompare作为一个选项 - 我确定还有其他选项。

2

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