关于Java:如何升级使用ORM工具构建的数据库架构?

关于Java:如何升级使用ORM工具构建的数据库架构?

How to upgrade database schema built with an ORM tool?

我正在寻找使用ORM工具(例如JPOX或Hibernate)升级数据库架构的通用解决方案。 在项目中如何做?

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

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


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


您可以检查某些数据库模式升级工具的功能比较。

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

  • mybatis(已标记1049个问题)
  • Liquibase(标记663个问题)
  • 飞路(已标记400个问题)
  • DBDeploy(已标记24个问题)。

我们编写代码SQL更新脚本,然后拆解该架构并应用更新脚本对其进行重建,这是我们持续构建过程的一部分。如果任何休眠映射与架构都不匹配,则构建将失败。


我不明白为什么ORM生成的架构与其他DB架构有什么不同-问题是相同的。假设您的ORM会吐出一个生成脚本,则可以使用外部工具进行比较

我还没有尝试过,但是google将SQLCompare作为一种选择回来了-我敢肯定还有其他选择。


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


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


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

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


我认为您最好的选择是使用包含SubSonic这样的数据库迁移的ORM工具:

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


推荐阅读

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux升级pip命令?

    linux升级pip命令?,官网,数据,项目,电脑,检测,管理,信息,系统,网址,百度,pyth

    开发linux命令工具?

    开发linux命令工具?,系统,工具,环境,状态,平台,设计,数据,电脑,中小企业,标

    linux命令行工具大全?

    linux命令行工具大全?,工作,系统,工具,地址,信息,命令,目录,基础,管理,文件,l

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux命令联想工具?

    linux命令联想工具?,地址,工作,系统,工具,状态,标准,信息,命令,目录,左下角,L

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux系统命令升级?

    linux系统命令升级?,系统,单位,工具,适当,名字,电脑,数据,信息,命令,音乐,mv

    linux命令工具怎么用?

    linux命令工具怎么用?,地址,系统,工作,单位,工具,密码,服务,命令,处分,基础,

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux命令进去数据库?

    linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

    linux数据库基础命令?

    linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

    linux命令行截图工具?

    linux命令行截图工具?,工具,电脑,软件,系统,截图,网站,工作,环境,暂停,命令,L

    linux命令工具教程?

    linux命令工具教程?,系统,工具,信息,基础,基础知识,代码,在线,地址,项目,服

    linux命令行渗透工具?

    linux命令行渗透工具?,系统,发行,网络,工具,信息,地址,管理,数据,工程,中国,