[英]Play! framework - database issue with Evolutions
我正在玩Play! 框架2.0,我陷入了涉及數據庫的惱人問題。
假設我有一個User
(extends Model
)類,它具有很少的屬性( first_name
, last_name
, email
, password
等)。
在某些時候我想添加一個新屬性,讓我們說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.