11

Playを使用しています!フレームワーク2.0と私はデータベースに関係する厄介な問題で立ち往生しています。

属性( 、、、など)がほとんどないUser(extends Model)クラスがあるとしfirst_nameます。 last_nameemailpassword

ある時点で、新しい属性を追加したいと思いますlast_ip(それが何であるかは実際には問題ではありません)。そこで、属性をUserクラスに追加し、コンパイルして実行します。

重要なのは、データベースの変更に関するこの赤いアラートを(明らかに)受け取り、「変更を適用」を押すように要求することです(正しく覚えている場合)。それは結構ですが!すべてのデータベースレコードが消去されます!

結論:新しいフィールドが必要ですが、データベースにすでに追加したすべてのレコードを失いたくありません。これは可能ですか?

4

4 に答える 4

18

conf/evolutions/default/1.sqlまず、 :のコメント付きの最初の2行を削除して、Evolutionファイルの自動生成を無効にする必要があります。

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

# --- !Ups
...

conf/evolutions/default/2.sql次に、 UpsセクションとDownsセクションを含むデータベーススキーマの更新を含む2番目のファイルを作成する必要があります。

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

# --- !Downs

ALTER TABLE USER DELETE COLUMN last_ip;
于 2012-08-26T14:23:39.287 に答える
4

あなたがおそらくしていることは、破壊的な進化を適用することです。1.sql(またはevolutionsファイルが何であれ)を見ると、DOWNSの下に「DROPDATABASEX」のようなstatemtntsがあります。Playは、evolutionファイルの変更を検出するたびに、すべてのダウンエボリューションを実行してから、アップエボリューションを再適用します。その結果、すべてのデータが失われます。

詳細は次のとおりです:http ://www.playframework.org/documentation/2.0.2/Evolutions

于 2012-08-25T15:04:58.893 に答える
3

Liquibaseをご覧になることをお勧めします。Liquibaseはデータベースの変更を処理し、非常に柔軟性があり、データベースに依存しません。私は自分のアプリケーションでそれを使用して、データベースの変更を適用するときに、物事が削除されないようにします。

于 2012-08-26T08:46:55.120 に答える
2

application.confでevolutionplugin=disableを設定することで、Evolutionを無効にできます。

于 2014-07-03T23:52:41.637 に答える