玩! 框架 – Evolutions的数据库问题

我正在玩Play! 框架2.0,我陷入了涉及数据库的烦人问题。

假设我有一个User (extends Model )类,它具有很少的属性( first_namelast_nameemailpassword等)。

在某些时候我想添加一个新属性,让我们说last_ip (它并不重要)。 所以,我将属性添加到User类,编译并运行。

问题是:我得到关于数据库更改的红色警报(显然),要求我按“应用更改 (如果我没记错的话)。 那很好但是! 所有数据库记录都被删除了

总结:我想要一个新的领域,但我不想丢失我已经添加到数据库的所有记录。 这可能吗?

首先,您需要通过删除conf/evolutions/default/1.sql的前2个注释行来禁用Evolution文件的自动生成:

 # --- Created by Ebean DDL # To stop Ebean DDL generation, remove this comment and start using Evolutions # --- !Ups ... 

然后,您需要创建第二个文件,名为conf/evolutions/default/2.sql其中包含有关Ups和Downs部分的数据库模式的更新:

 # --- !Ups ALTER TABLE USER ADD COLUMN last_ip varchar(30) DEFAULT NULL; # --- !Downs ALTER TABLE USER DELETE COLUMN last_ip; 

你可能正在做的是应用破坏性的演变。 如果你查看1.sql(或者你的evolutions文件是什么),在DOWNS下你有像“DROP DATABASE X”这样的statemtnts。 每当Play检测到进化文件中的更改时,它都会运行所有向下演变,然后重新应用向上演变,从而导致所有数据丢失。

以下是更多信息: http : //www.playframework.org/documentation/2.0.2/Evolutions

我建议你看看Liquibase 。 Liquibase处理数据库更改,超级灵活且与数据库无关。 我在我的应用程序中使用它来确保在应用数据库更改时不会删除任何内容。

您可以通过在application.conf中设置evolutionplugin = disabled来禁用Evolutions