Java等效于数据库模式更改,如South for Django?

Java等效于数据库模式更改,如South for Django?,java,django,hibernate,orm,django-south,Java,Django,Hibernate,Orm,Django South,我一直在从事Django项目,使用South跟踪和管理数据库模式更改。我正在使用GoogleWebToolkit启动一个新的Java项目,不知道是否有一个等效的工具。对于那些不知道的人,以下是南方的做法: 自动识别对Python数据库模型的更改(添加/删除列、表等) 自动创建SQL语句以将这些更改应用于我的数据库 跟踪应用的架构迁移并按顺序应用它们 允许使用Python代码进行数据迁移。例如,使用Python split()函数将name字段拆分为first name和last name字段

我一直在从事Django项目,使用South跟踪和管理数据库模式更改。我正在使用GoogleWebToolkit启动一个新的Java项目,不知道是否有一个等效的工具。对于那些不知道的人,以下是南方的做法:

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

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

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

这是我在自己的项目中使用的方法,在过去几年中,它对我非常有效,并进行了几次更新/模式更改:

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

  • 在代码中维护模式的“当前”版本号

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

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

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

    希望有人能给我一个更好的答案,让我采取更“不插手”的方法,但我想我会分享一个对我来说非常有效的方法


    祝你好运

    当我在寻找同样的目标时,以下是我迄今为止所取得的成就

    我们第一次使用。它为您管理最多的内容,但您必须自己编写所有转换脚本!这意味着你所做的每一个改变都必须有自己的脚本,你必须从头开始写。不是很方便,但工作非常可靠

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


    完美的解决方案是让south使用java环境。这真的是一个可以结合的工具:D

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


    特别是因为我可以用它来为我生成模型。然后用Python“无缝地”替换部分Java。这似乎是一个不错的选择。

    如果您使用的是hibernate,那么请签出liquibase

    它已经存在10年了,所以它非常坚固。它可能支持其他的ORM,只要在他们的网站上挖掘一下就可以了。在此处签出liquibase+hibernate扩展:


    正在寻找相同的,也找到了:和