WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [GAE]Keyに文字列を自分で設定する場合の注意点

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

Entityを保存するとき、Keyを指定しなければ数字を勝手に振ってくれますが、自分で指定することもできます。例えばUser Entityでuser_idのような文字列をKeyにしていするなんてことが考えられますが、RDBになれた私たちにとってはちょっと思いがけない挙動をします。

次のコードを見てください


DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

Entity entity1 = new Entity("Test", "uniqueKey");
entity1.setProperty("name", "foo");
ds.put(entity1);

//同じキーで新規にEntityを作る
Entity entity2 = new Entity("Test", "uniqueKey");
entity2.setProperty("name", "bar");
ds.put(entity2);

Entity check1 = ds.get(KeyFactory.createKey("Test", "uniqueKey"));
System.out.println(check1.getProperty("name"));//これはbar

Query query = new Query("Test")
.addFilter("name", FilterOperator.EQUAL, "foo");

Entity check2 = ds.prepare(query).asSingleEntity();

System.out.println(check2);//これはnull
同じキーでEntityを作成するとなにも警告なく前会ったキーを上書きます。ユニーク制約もそうですが、自分で事前に取得して確認しないとダメでしょう。
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。