我一直在使用South来跟踪和管理数据库架构更改的Django项目上进行工作。我正在使用Google Web Toolkit开始一个新的Java项目,想知道是否有一个等效的工具。对于那些不知道的人,这是South的工作:

  • 自动识别对我的Python数据库模型的更改(添加/删除列,表等)
  • 自动创建SQL语句以将这些更改应用于我的数据库
  • 跟踪已应用的模式迁移,并按顺序
  • 进行应用
  • 允许使用Python代码进行数据迁移。例如,使用Python split()函数
  • 将名称字段拆分为名字和姓氏字段

    我还没有决定我的Java ORM,但是Hibernate看起来是最受欢迎的。对我而言,轻松进行数据库架构更改的能力将是一个重要因素。

    最佳答案

    哇,南方听起来很棒!我不确定有什么现成的方法可以为您提供几乎一样的帮助,但是,如果您选择Hibernate作为ORM解决方案,则可以构建自己的增量数据迁移套件而不会遇到很多麻烦。

    这是我在自己的项目中使用的方法,它对我来说工作了好几年,并且进行了几次更新/架构更改:

  • 在数据库中维护一个schema_version表,该表仅定义一个代表数据库模式版本的数字。如果需要,可以在Hibernate范围之外处理该表。
  • 在代码中维护架构的“当前”版本号。
  • 如果代码中的版本号比数据库的版本新,则可以使用Hibernate的SchemaUpdate实用程序,该实用程序将检测任何架构添加项(注意,仅仅是添加项),例如新表,列和约束。
  • 最后,如果您要迁移的步骤不只是根据需要更改的架构版本号来标识的架构更改,我将维护一个“脚本”。例如,新列需要应用默认值或类似的性质。

  • 这听起来可能需要做很多工作,尤其是在来自为您解决了很多问题的环境中的时候,但是您可以使用Hibernate迅速完成这样的设置,并且很容易随行添加上。在那段时间里,除了添加新的迁移任务之外,我从未对增量更新框架进行任何更改。

    希望有人会提出更好的“不让步”方法的好答案,但是我认为我会分享一种对我来说效果很好的方法。

    祝你好运!

    10-05 21:15
    查看更多