apache.JDO /w DataNucleus を使用して小さなプロジェクトをセットアップしました。データは問題なく保存できるのですが、更新や削除しようとすると行き詰まりました。
シナリオは次のとおりです。
- オブジェクトを作成して永続化し、id を取得します
@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) プライベート ロング ID。
- PersistenceManager を閉じます
- アプリでオブジェクトを変更します (一時的)
- もう一度永続化しようとしましたが (id フィールドは同じです)、更新する代わりに、新しいオブジェクトが作成されます
Google App Engine では、同じシナリオで最新情報が得られました (予想される結果 - 以下を参照)。
私の問題を例示するために、小さなコードサンプルも提供します。
PersistenceManager pm = PMF.getPM(); Option dao = new Option(String.class, "field", "A"); pm.makePersistent(dao); pm.close(); System.out.println("1"); for (オブジェクト o : Model.findAll(Option.class)) System.out.println(((オプション) o).getValue()); dao.setValue("B"); 午後 = PMF.getPM(); pm.makePersistent(dao); pm.close(); System.out.println("2"); for (オブジェクト o : Model.findAll(Option.class)) System.out.println(((オプション) o).getValue()); 午後 = PMF.getPM(); pm.makePersistent(dao); pm.deletePersistent(dao); pm.close(); System.out.println("3"); for (オブジェクト o : Model.findAll(Option.class)) System.out.println(((オプション) o).getValue());
出力は次のようになると思います。
1 あ 2 B 3
しかし、代わりにそれは私に与えます:
1 あ 2 あ B 3 あ B
私が間違っていることについて何か提案はありますか? (ところで、RetainValues を有効にして、非トランザクション RW を使用しています)