我以前没有使用 Liquibase 等工具的经验。到目前为止,我通常使用 Hibernate 在应用程序上管理部署到生产中的方式是使用手动 SQL 来修改表,因为它们是非常简单的应用程序(复杂的应用程序没有使用它......请不要问: P).
我想在 Play 中使用 Evolutions,但我发现它在开发中与 Hibernate 有很大的冲突,这使它成为一种痛苦而不是一个现实的选择。在开发中,Hibernate 可以轻松管理所有内容,因此没有必要使用 Evolutions,但我们希望保留结构(文件),以便更轻松地在生产模式下迁移应用程序。但由于冲突,它似乎不值得。
Liquibase 有一个 Play 模块,但自 Evolutions 发布以来它似乎已经停产(我想知道为什么,因为我相信它会与 Hibernate 一起工作)。
问题是:
- 您如何管理生产中应用的数据库迁移?
- 当您的模型在不同版本之间发生变化并且您必须部署到生产环境时,您通常使用什么程序/步骤?
- 我们忽略了 Hibernate 的任何特定工具或功能,或者只是老忠实的 SQL Alter table 和类似工具?
- 专注于 Play Framework,您如何管理它?
最佳答案
通常情况下,应用程序在其生命周期中有两个阶段 - 初始开发和后期制作“维护”。我的经验是,所有大型数据库更改通常都发生在第一阶段。通过依赖 Hibernate 让自己在这方面变得灵活,然后当您进入生产环境时,您可以进行模式转储,使用 Evolutions 将其滚动到生产环境,并从那里手动管理您的 DDL。
在第二个“阶段”(我是一个敏捷的人,我讨厌这个词 ;-)),模式更改通常也包括 DML,因为您必须计算新列的初始值,等等。此外,与模式更改相比,您通常会花更多的时间在编码上,因此整个手动体验变得不那么痛苦 :)。
(话虽如此 - 我希望 Evolutions 和 Play/Hibernate 之间有更好的集成,比如可以选择记录 Hibernate 吐出到 evolutions 目录的 DDL)
关于database - 玩耍、 hibernate 和进化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6681445/