保存しない属性には@NotPersistentを必ず付ける

 GAE/Jの記述ではなるべく付けるようにとあるが、付けないと誤動作することがあった。

ローカルのDatastoreの所在

 GAE/Jの記述にあるようにプロジェクトのwar/WEB-INF/appengine-generated/local_db.bin。データが不要になったらサーバ停止後、単純に削除してしまえばよい。

 ローカルDatastoreのデータはアプリをuploadしてもGAEにはuploadされない。

なにかおかしくなったらプロジェクトをクリーンしてみる

 いままで保存できていたデータが保存できなくなったりした場合には、クリーンしてみると解決することがある。

relationshipのchildとkey

 GAE/Jの記述にあるようにchild側のkeyはKeyかKey as Encoded Stringでなくてはならない。

relationshipのparentとkey

 現時点ではバグのため、parentのkeyもKeyかKey as Encoded Stringでないとおかしくなる。

(5/26追記・5/14にリリースされたSDK version 1.2.1で修正されたようです(未確認)。)

PersistenceManagerのcloseのタイミング

 使用が終わったらcloseするとのことだが、closeのタイミングが難しい。

 たとえばcbnanashi@GAE/Jでは"パーツ←→レビュー"というrelationにしているので、relationを使えばActionからパーツを渡し、JSPでレビューを表示できるのだが、このときにはpmが開いたままである必要がある。

 そのためcbnanashi@GAE/JではServletFilterでpmの取得、closeを行っている。

(5/26追記・こちらもあわせてご覧ください。)

makePersistentAllメソッドはエラーがわかりにくい

 えらー発生時に細かい例外情報が省略されてしまうので開発中はmakePersistentを呼ぶ方がよい。GAE/Jの記述によると現時点ではmakePersistentAllは複数回呼ぶのと同じだが、将来はより効率的になるとのこと。

datastore-indexes-auto.xmlは消えることがある

 突然内容が消えることがあるようだ。使用するindexがわかったらdatastore-indexes.xmlに記述を移しておくとよい。

entityへの変更が反映されない場合がある

 よくわかっていないが"entityをpmから取得→属性更新→もう一度同じentityを取得→pm.close"とすると属性更新がDatastoreに反映されないようだ。属性更新後にpm.closeし再度pmを取得するようにすると保存されるようになった。

複数回のqueryで同一entityを取得すると同じインスタンスが返る

 同一のpmで複数回取得すると同じインスタンスになるらしい。