0

エンティティのフィールド名を変更した場合を試しています。たとえば、このようなものがあります

class Person {
   String name; //The original declaration was "String fullName"    
}

objectifyによると、annonationを使用する必要があります@AutoLoad("")。これは問題なく、Google Datastoreは実際にはデータを削除しないので機能しますが、新しいフィールドを作成するため、このアノテーションは古いフィールドと新しいフィールドの間のマッピングのようなものです。テーブル全体を読んでいるときは問題ありません。

クエリにフィルタを適用すると、問題が発生します(古い名前で5つのオブジェクトを作成し、新しい名前で5つのオブジェクトを作成したとします)。クエリの結果は、古い変数名を使用したか、新しい変数名を使用したかによって異なります(5のみを返しますが、10は返しません)。それらの両方をフェッチしてマップすることはありません。この問題について何か提案はありますか?わかりやすく説明したと思います。

前もって感謝します

4

3 に答える 3

1

最も単純で簡単なソリューション。注釈「AutoLoad()」を使用してすべてのデータをフェッチします。その後、それらを再度保管します。このようにして、それらは新しいフィールドとして保存されます。古いものはもう存在しないか、少なくともデータはもう含まれていません。これは、データを古い名前から新しい名前に移行するようなものです。誰かがより良い提案がありますか?

于 2011-03-22T16:20:56.850 に答える
1

フィールドの名前を変更した場合は、すべてのデータをロードして再配置する必要があります(mapreduce APIを使用することがここでの1つのオプションになります)。これを回避する魔法の方法はありません。保存したデータは、ディスク上に2つの異なる名前で存在します。

于 2011-03-23T00:46:09.013 に答える
0

@OldNamehttp ://www.mail-archive.com/google-appengine-java@googlegroups.com/msg05586.htmlを使用できます

于 2011-03-22T16:43:53.153 に答える