Play! framework - database issue with Evolutions

烂漫一生 提交于 2019-12-20 09:20:00

问题


I'm using Play! framework 2.0 and I'm stuck on an annoying issue involving the database.

Suppose I have a User (extends Model) class which has few attributes (first_name, last_name, email, password etc).

At some point I want to add a new attribute, lets say last_ip (it doesn't really matter what it is). So, I add the attribute to the User class, compile and run.

The thing is: I get this red alert about database changes (obviously) which asks me to press "APPLY CHANGES" (if I remember correctly). That's fine BUT! all the database records are erased!

In conclusion: I want to a new field but I don't want to lose all the records I already added to the database. Is this possible?


回答1:


First you need to disable automatic generation of Evolution files by deleting the first 2 commented lines of the conf/evolutions/default/1.sql:

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

# --- !Ups
...

Then, you need to create a second file, called conf/evolutions/default/2.sql containing your update on the database schema with an Ups and a Downs section:

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

# --- !Downs

ALTER TABLE USER DELETE COLUMN last_ip;



回答2:


What you are probably doing is applying destructive evolutions. If you look in 1.sql (or whatever your evolutions file is), under DOWNS you have statemtnts like "DROP DATABASE X". Whenever Play detects changes in the evolution file, it runs all the down evolutions, then reapplies the up evolutions, resulting in all your data being lost.

Here is more info: http://www.playframework.org/documentation/2.0.2/Evolutions




回答3:


I suggest you take a look at Liquibase. Liquibase handles database changes, is super flexible and is database independent. I use it in my applications to make sure when I apply a database change things don't get deleted or whatever.




回答4:


You could disable Evolutions by setting evolutionplugin=disabled in application.conf



来源:https://stackoverflow.com/questions/12123052/play-framework-database-issue-with-evolutions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!