データストアからデータが消えた?いいえ、アプリケーション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の異なるデータストア間のデータ移動・コピーに使えそうだ。


おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です