玩!框架-具有演化的数据库问题

3okqufwl  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(279)

我在玩游戏!framework2.0和我陷入了一个恼人的数据库问题。
假设我有一个 User (延伸) Model )类,该类几乎没有属性( first_name , last_name , email , password 等等)。
在某个时候,我想添加一个新属性,比如说 last_ip (这其实并不重要)。因此,我将属性添加到 User 类、编译和运行。
问题是:我收到一个关于数据库更改的红色警报(显然),它要求我按“apply changes”(如果我没记错的话)。那很好,但是!所有的数据库记录都被删除了!
总之:我想创建一个新字段,但不想丢失已添加到数据库中的所有记录。这可能吗?

q1qsirdb

q1qsirdb1#

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


# --- Created by Ebean DDL

# To stop Ebean DDL generation, remove this comment and start using Evolutions

# --- !Ups

...

然后,需要创建第二个文件,名为 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;
ktca8awb

ktca8awb2#

我建议你去看看烈酒。liquibase处理数据库更改,非常灵活,并且独立于数据库。我在我的应用程序中使用它来确保当我应用数据库更改时,不会删除任何东西。

2g32fytz

2g32fytz3#

你可能正在应用破坏性的进化。如果您查看1.sql(或者您的evolutions文件是什么),在downs下会有类似“drop database x”的语句。每当play检测到进化文件中的更改时,它就会运行所有向下的进化,然后重新应用向上的进化,从而导致所有数据丢失。
更多信息:http://www.playframework.org/documentation/2.0.2/evolutions

sf6xfgos

sf6xfgos4#

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

相关问题