Play! framework - database issue with Evolutions

socksocket picture socksocket · Aug 25, 2012 · Viewed 8.3k times · Source

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?

Answer

ndeverge picture ndeverge · Aug 26, 2012

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;