各インスタンスにバージョンタイプのオブジェクトのリスト(プロジェクトクラスとバージョンクラスの間に1対多の関係がある)が存在する、持続可能なクラスProjectがあります。GAEのJDO:クエリによって返されたオブジェクトの更新
私はそれらを変更して保存しようと、クエリでデータストアからいくつかのバージョンのオブジェクトを取得しています:
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
Query q = pm.newQuery(Version.class, "... filters here ...");
q.declareParameters(" ... parameters here ...");
List<Version> versions = (List<Version>)q.execute(... parameters here ...);
if (versions.size() > 0) {
for (Version version : versions) {
version.setOrder(... value here ...);
}
pm.makePersistentAll(versions);
}
tx.commit();
return newVersion.toVersionInfo();
} finally {
pm.close();
}
すべてがエラーなしで実行され、クエリが実際のプロパティは実行時のバージョンのリストで正しく設定されている、複数のオブジェクトを返します。オブジェクトストアのプロパティはデータストア内で更新されません。オブジェクトのプロパティ)は(pm.close前に設定されているが、この行が省略された場合は何も、保存されませんので、
一般的に、私の知る限り理解し、バージョンは、さえ
pm.makePersistentAll(versions);
を呼び出さずに保存する必要があり、同じように。
同時に、pm.getObjectById()メソッドを使用してProjectタイプのインスタンス(バージョンVersionのインスタンスを多数所有)を取得し、ループ内のすべての関連するVersionオブジェクトを処理すると、すべての変更が正しく保存されますpm.makePersistent()メソッドを呼び出すことなく)。
問題は、オブジェクトを更新するそのような方法で何が問題になりますか?なぜバージョンオブジェクトのプロパティがデータストアで更新されないのですか?
JDOやGAEのドキュメントでは役に立たないものは見つかりませんでした。ピーターロコアナハからDataNucleusのからログに関するアドバイスや同情のため
おそらく、あなたがsetOrderを呼び出すポイントの周りを見ていると、あなたはよく理解できるかもしれません。 – DataNucleus
あなたを助けることはできませんが、これらのタイプのデバッグが間違いなく私の髪を引き裂こうとしているように、同情を提供することができます。 –