8

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

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

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

4

5 回答 5

2

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

这是我在自己的项目中使用的方法,它对我来说工作得相当好几年和几个更新/架构更改:

  1. 在数据库中维护一个 schema_version 表,该表简单地定义了一个表示数据库模式版本的数字。如果您愿意,可以在 Hibernate 范围之外处理此表。

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

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

  4. 最后,我维护了一个“脚本”,如果您愿意迁移步骤不仅仅是模式更改,这些更改由它们所需的模式版本号标识。例如,新列需要应用默认值或类似的东西。

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

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

祝你好运!

于 2010-03-11T22:30:09.933 回答
1

因为我正在寻找我迄今为止所取得的相同的继承人。

我们首先使用dbdeploy。它为您管理最多的东西,但您必须自己编写所有过渡脚本!这意味着您所做的每项更改都必须在自己的脚本中,您必须从头开始编写。不是很方便,但工作非常可靠。

我遇到的第二件事是liquibase。它将配置存储在一个 xml 文件中。阅读起来不是很直观,但易于管理。另外还有一个 Intellij Idea 插件。在撰写本文时,它仍然存在一些小问题,但正如作者向我保证的那样,它们很快就会得到修复。

完美的解决方案是使用您的 java 环境。那真的是结婚的工具:D

于 2012-05-04T09:16:13.457 回答
1

也许尝试飞行。似乎是一个不错的选择。

于 2016-06-15T15:20:40.873 回答
0

我一直在考虑django-jython在我们的遗留 Java 应用程序中仅使用数据库迁移。最新的Jython版本是 2.5.4rc1,但我认为我可以通过将其用于南迁移来降低风险。

特别是因为我可以使用inspectdb为我生成模型。然后用 Python “无缝”替换部分 Java。

于 2013-11-28T10:28:57.157 回答
0

如果您使用的是休眠,请查看 liquibase

http://www.liquibase.org/databases.html

它已经存在了 10 年,所以它非常可靠。它可能支持其他ORM,只需在他们的网站上进行挖掘。在此处查看 liquibase+hibernate 扩展:

https://github.com/liquibase/liquibase-hibernate

于 2016-06-24T00:45:09.903 回答