「gae.encoded-pk」と「gae.pk-id」の両方を永続的に定義するクラスを作成すると、encoded-pk は更新されますが、id は null のままです。スローされる例外はなく、コードは Google のドキュメントからそのままコピー ペーストされているため、ここで何が起こっているのかわかりません。
クラスは以下を定義します。
@PersistenceCapable
public class MyClass {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String encodedKey;
@Persistent
@Extension(vendorName="datanucleus", key="gae.pk-id", value="true")
private Long keyId;
そして、私はそれを次のように永続化します:
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(myInstance);
// myInstance = pm.makePersistent(myInstance); - Produces the same result.
} finally {
pm.close();
}
デバッガーを使用してこのコードをステップ実行していますが、永続化マネージャーを閉じた後でも keyId は null のままです。
また、これは google appengine 開発キットを使用してローカルで実行されていることも指摘しておく必要があります。これをデバッグする方法についてのポインタは大歓迎です!