等价于Java的数据库架构更改,例如Django的South?

use*_*478 5 java django orm hibernate django-south

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

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

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

Bry*_*anD 2

哇,南方听起来棒极了!我不确定有什么开箱即用的工具可以为您提供如此多的帮助,但是如果您选择 Hibernate 作为您的 ORM 解决方案,您可以构建自己的增量数据迁移套件,而不会遇到很多麻烦。

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

  1. 在数据库中维护一个 schema_version 表,该表仅定义一个表示数据库架构版本的数字。如果您愿意,可以在 Hibernate 范围之外处理该表。

  2. 在代码中维护架构的“当前”版本号。

  3. 当代码中的版本号比数据库的版本号新时,您可以使用 Hibernate 的 SchemaUpdate 实用程序,它将检测任何模式添加(注意,只是添加),例如新表、列和约束。

  4. 最后,如果您愿意的话,我维护了一个“脚本”,其中的迁移步骤不仅仅是通过所需的架构版本号来标识的架构更改。例如,新列需要应用默认值或类似性质的值。

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

希望有人能够为更加“不干涉”的方法提供一个好的答案,但我想我会分享一种对我来说非常有效的方法。

祝你好运!