Google App Engine for Java で Objectify を使用しています。Enum#name()を使用して定数を単純に保存/ロードする提供されたEnumTranslatorFactoryを使用して、データストアにさまざまな列挙型定数を永続化します。これはうまくいきます。
アプリの新しいバージョンを GAE にリリースすると、新しいバージョンは古いバージョンの隣に存在し、クライアントに同時にリクエストを提供します。これは、Google のトラフィック分割ドキュメントでよく説明されています。
システムのアップグレードにより、読み込み中にエラーを引き起こす新しい Enum 定数が導入されます。例えば:
バージョン 1 には次の列挙型があります。
enum Meal{BREAKFAST,LUNCH,DINNER}
バージョン 2 には、英国の食事をサポートするために列挙型に追加された追加の定数があります。
enum Meal{BREAKFAST,LUNCH,TEA,DINNER}
アプリのバージョン 2 をテストしている間、TEA はいくつかのエンティティで永続化されます。その後、バージョン 1 はそのエンティティをロードし、Objectify はランタイム例外をスローする Enum#valueOf(...) を使用して TEA を Enum に変換しようとします。
Objectify docsは列挙型のデータ移行について説明していますが、上記の状況を満たしていません。
この状況に対処する最善の方法についての提案に興味があります。