繁体   English   中英

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

[英]Play! framework - database issue with 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
...

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

# --- !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检测到evolution文件中的更改时,它都会运行所有向下演变,然后重新应用向上演变,从而导致所有数据丢失。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM