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