当我使用JPA时,如何管理数据库演变?

Jos*_*der 6 mysql jpa playframework

我通过在他们的网站上按照教程构建一个小博客引擎来学习游戏.

它使用JPA并在其引导程序中调用Fixtures.Deletemodels(),(或类似的东西).

它基本上每次运行时都会核对所有表,我丢失了所有数据.

我已经部署了一个生产系统(没有核武器声明).

现在我需要将大量更新部署到生产系统.许多类已更改,已添加并已删除.在我的本地测试中,没有在每次运行时查看表,我遇到了同步问题.当我尝试写或从表中读取时,播放会抛出错误.我打开了mysql,确定表格在某些情况下只是部分修改和修改不正确.即使我在我的配置中将DDL模式设置为"创建",JPA也似乎无法"弄清楚"如何协调更改并相应地修改我的架构.

所以我必须回到我所有桌子的核心引导声明中.

所以我开始研究Play中的数据库演变,并在play框架网站上阅读有关数据库演变的文章.文章讨论了版本脚本,但它说,"如果您使用JPA,Hibernate可以自动为您处理数据库演变.如果您不使用JPA,演变很有用".

因此,如果JPA应该为我处理这个问题,我该如何在大型Play应用程序中部署大型更新?到目前为止,JPA无法正确更改架构,应用程序将抛出错误.我对丢失我的所有数据都不感兴趣,所以修复dev"Fixtures.deleteModels()"无法真正用于prod.

先谢谢你,乔希

JB *_*zet 7

不,JPA不应该为你照顾它.这不是一个神奇的工具.如果您决定将表"client"重命名为"customer",则将"street"列重命名为"line1",并将客户类型列的值从1,2,3切换为"bronze","silver","黄金",JPA没有办法在你的脑海中读到并想象所有的变化都是自动完成的.

要从一个模式迁移到另一个模式,可以使用相同的工具,就像不使用JPA:SQL脚本,或更高级的模式和数据迁移工具,甚至是自定义迁移JDBC代码一样.

  • 正如我所说,JPA(可能还有那些演变脚本)能够通过删除和创建列和表将现有模式转换为新模式,但它不会像您希望的那样迁移数据.你必须编程. (2认同)