数据库模式更改的 Java 等效项,例如 Django 的 South?

标签 java django hibernate orm django-south

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

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

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

最佳答案

哇,South 听起来棒极了!我不确定是否有任何开箱即用的东西可以帮助您几乎与它一样多,但是如果您选择 Hibernate 作为您的 ORM 解决方案,您可以构建自己的增量数据迁移套件而不会遇到很多麻烦。

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

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

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

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

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

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

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

祝你好运!

关于数据库模式更改的 Java 等效项,例如 Django 的 South?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427780/

相关文章:

c# - 一个很好的可视化排序算法的动画库

java - Spring:不以惰性模式加载,但获取数据

hibernate - 什么是 DB2 jdbc 驱动程序或者我可以从哪里获得它?

python - 在 Django 管理面板中无法添加和更改我的模型对象

java - Hibernate 延迟加载问题

java - 需要开源进行文件处理

java - 如何在 HTTP 请求中发送对象

java - Yandex API 地理编码

django - 如何在 Django 中创建对话收件箱

Django-taggit:如何检索由某种类型的帖子过滤的所有标签