データストアからデータが消えた?いいえ、アプリケーションIDを変更しました。
GoogleAppEngineのアカウントを取得し、WEB-INF/appengine-web.xmlのApplication IDを設定したらデータストアからデータが取得できなくなってしまった。開発用サーバのlocal_db.binにデータそのものは入っているし、新たに追加したものは正常に取得できる。
これはどうやらEntityのkeyにApplication IDが含まれていることが原因のようだ。低レベルAPIのEntityTranslatorでEntityの中身を見ると以下のようになっていることがわかる。
EntityProto ep = EntityTranslator.convertToPb(entity);
System.out.println(ep);
key <
app: "MyAppID"
path <
Element {
type: "MyKind"
id: 3
}
>
>
entity_group <
Element {
type: "MyKind"
id: 3
}
>
property <
...
>
EntityのMyAppIDをNewAppIDに変更するには次のようにする。
EntityProto ep = EntityTranslator.convertToPb(entity);
ep.getKey().setApp("NewAppID");
Entity newentity = EntityTranslator.createFromPb(ep);
Application IDを修正してやれば、アプリケーションIDの異なるデータストア間のデータ移動・コピーに使えそうだ。