Google App Engine/Java + Slim3 では、「データを一意に取得できさえすればいい」場合、特にKeyには何も指定せずにputできます。
Activity putActivity = new Activity(); putActivity.setEvent("新規ユーザー登録"); Datastore.put(putActivity); Activity getActivity = Datastore.get(putActivity.getKey());//Keyは自動的に生成される
でも、例えばユーザーを表すUserエンティティなどの場合、「ログインIDを主キーにしたい」という場合があると思います。 そういうときは、Datastore.createKey()を使い、以下のようにすればOKです。
User putUser = new User(); putUser.setKey(Datastore.createKey(User.class, "a-know"));//"a-know"がログインIDに相当 putUser.setTwitterID("@a_know"); Datastore.put(putUser); User getUser = Datastore.get(Datastore.createKey(User.class, "a-know"));//ログインID文字列からKeyを生成
こうすることで、この場合ではログインIDさえわかっていれば、Keyを生成できることになります。
さらに、親キーを指定した上でKeyを生成することもできます。 上記Userエンティティが登録されている上で、ユーザーごとに日記・Diaryエンティティ(一日一エントリのみとする)を保持するとした場合。 Datastore.createKey()を使って以下のようにすることでKeyを生成することができ、また生成されたKeyのgetParent()で親キーを取得することができます。
Key userKey = Datastore.createKey(User.class, "a-know");//親となるUserキーを作っておく Diary diary1 = new Diary(); diary1.setKey(Datastore.createKey(userKey, Diary.class, "2012-6-15"));//第一引数に親キーを指定 diary1.setContent("今日はいまいちだった。"); Datastore.put(diary1); Diary diary2 = new Diary(); diary2.setKey(Datastore.createKey(userKey, Diary.class, "2012-6-16")); diary2.setContent("今日はまぁまぁだった。"); Datastore.put(diary2); Diary diary3 = new Diary(); diary3.setKey(Datastore.createKey(userKey, Diary.class, "2012-6-17")); diary3.setContent("今日はイケイケだった。"); Datastore.put(diary3); Key getUserKey = diary2.getKey().getParent();//Key.getParent()で親キー取得。
これで簡単に、親エンティティのキーを取得することができますね。