APIで行くか、を選択するのが良いと思ってます。APIから入って、それから「JDOだとこんな事を便利にやってくれるんだ」とプラスαの部分を積んでいく方が良い。JDOから入るとどーしてもRDBのORMだという認識が頭から抜けずにはまる人が多いよぅに思うんですよね。スタンスとしてはJDOを使う事に否定的なわけではなく、学習の順序という話です。APIを使うと、JDOのようなPOJOにアノテーション、タイプセーフなpropertyにアクセサ...と言った物は無いです。全てのエンティティをEntityクラスとして扱う必要があります。kind)Kind名が必須です。主Keyを指定しない事になるので、永続するタイミングで主Keyは自動生成されます。key;と同じ状態です。keyName)keyNameはKeyを作成する時に使用する文字列のnameのアレです。Keyオブジェクトを渡す方がわかりやすいと思うんだけど、うっかりそれをやるとそのKeyを持つEntityを親としたEntityGroupを形成してしまいます(次に説明するAncectorKeyでのコンストラクタが適用されてしまう)。APIでEntityGroup(用は単なる親子関係ですね)を形成したい場合はこれを使います。第二引数で指定したKeyに対応するエンティティの子エンティティとなるエンティティが作成されます。EntityGroupといっても、結局「エンティティのKeyが親を持つか?持たないのか?」という事でしか無いのです。ancestor;という方法で子エンティティに親エンティティの主キーをバインドしたり、設定したりしてEntityGroupを形成するRelationshipの組み方がありますが、これが近いかもしれません。primaryKey)SDK1.2.5で追加されました。主キーを指定してEntityを作成します。Keyオブジェクトには親エンティティのKeyを含める事ができるので、EntityGroupの子供になる場合もこのコンストラクタが使えます。propertyValue)属性の名前を指定して、エンティティに値を格納します。ちなみに、BlobやText等のインデックス対象外の属性の場合はsetUnindexedProperty()を使う必要があります。safeではありません。propertyName)存在しない属姓名が指定されてもExceptionを投げずにnullを返してきます。safeではないのでJavaで使う場合はcastがウザイです。propertyName)っていうメソッドもあります。指定された属性名に対応する属性が存在しない場合にfalseを返します。指定された属姓名に対応する値がnullの場合でも、属性さえあればtrueを返しますので、属性が存在しない/存在するけどnull、の区別をつける事が出来ます。JDOを使って書き込みを行っている場合は、エンティティのバージョン管理という意味の楽観的排他制御やListPropertyのインデックス等の制御をする為にJDOが独自に付加した属性が存在していたりします。気をつけなければいけない点としてIntegerで書き込んた属性値も実際にはLongに変換されて書き込まれるという点です。取得するとLong型で取得できてしまいます。getParent()を使います。主キーは特殊な扱いで、KEY_RESERVED_PROPERTYという定数で主キーを意味する属姓名が定義されています。値は"__key__"で、GAE/Pythonを使ってる人にはおなじみの値です。ancestorKey)コンストラクタに親キーのみ指定するものもあるんですが、それを使って何かが取得できた記憶が無いので使い方がよくわかってません。コレの使いどころがわかっている方、教えて下さると嬉しいです。→ローカルでは動作しませんが、Production環境では「親キーに属する全てのエンティティを、Kindを横断してごっそり取得する」という動作をします。value)見たまんまです。LESS_THAN[_OR_EQUAL]という定数があります。direction])これも見たまんまです。DESCENDINGが定数として定義されています。setKeysOnly()重要。キーのみのスキャンを行う時はコレを使います。取得できるのはKeyのみで、属性にはアクセスできないEntityが返ってきます。JDOでいうsetResult("key")とほぼ同じです。DatastoreServiceDatastoreへアクセスする為のサービスクラスで、大概の処理はこのDatastoreServiceが担当するんですが案外シンプルです。そんなに機能が無いからですw。他のサービスクラスと同様に、サービスクラス用のファクトリからインスタンスを取得します。DatastoreServiceFactory.getDatastoreService();保存するめちゃ簡単です。entities)の2種類のメソッドです。後述しますが、Transaction中で実行したい場合は第一引数にTransactionを与えます。