我在玩游戏!framework2.0和我陷入了一个恼人的数据库问题。
假设我有一个 User
(延伸) Model
)类,该类几乎没有属性( first_name
, last_name
, email
, password
等等)。
在某个时候,我想添加一个新属性,比如说 last_ip
(这其实并不重要)。因此,我将属性添加到 User
类、编译和运行。
问题是:我收到一个关于数据库更改的红色警报(显然),它要求我按“apply changes”(如果我没记错的话)。那很好,但是!所有的数据库记录都被删除了!
总之:我想创建一个新字段,但不想丢失已添加到数据库中的所有记录。这可能吗?
4条答案
按热度按时间q1qsirdb1#
首先,您需要通过删除文件的前2行注解来禁用演化文件的自动生成
conf/evolutions/default/1.sql
:然后,需要创建第二个文件,名为
conf/evolutions/default/2.sql
包含对数据库架构的更新,其中包含一个起伏部分:ktca8awb2#
我建议你去看看烈酒。liquibase处理数据库更改,非常灵活,并且独立于数据库。我在我的应用程序中使用它来确保当我应用数据库更改时,不会删除任何东西。
2g32fytz3#
你可能正在应用破坏性的进化。如果您查看1.sql(或者您的evolutions文件是什么),在downs下会有类似“drop database x”的语句。每当play检测到进化文件中的更改时,它就会运行所有向下的进化,然后重新应用向上的进化,从而导致所有数据丢失。
更多信息:http://www.playframework.org/documentation/2.0.2/evolutions
sf6xfgos4#
您可以通过在application.conf中设置evolutionplugin=disabled来禁用进化