5

「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 開発キットを使用してローカルで実行されていることも指摘しておく必要があります。これをデバッグする方法についてのポインタは大歓迎です!

4

1 に答える 1

1

私はこの答えを見つけました:

GAE JDO プラグインは、データストアから「gae.pk-id」/「gae.pk-name」フィールドでマークされたフィールドを読み取るときにのみ設定します (SVN トランクで検索するだけで、FetchFieldManager が唯一の場所です)。ロードされた場所 - PUT を実行するときに設定されません)。1.x で何をしたかはわかりませんが、GAE 独自のテストはすべて、1.x で行ったように 2.x でもパスします。しかし、その「機能」はとにかく標準の JDO ではないので、私にはほとんど興味がありません。

参照: GAE/J DataNucleus プラグイン バージョン 2.1.2 を使用して、新しく作成された JDO 永続エンティティの ID を取得できません

于 2015-02-06T05:48:30.803 に答える