2012-05-10 15 views
2

私はエンティティを持っていて、自分のプロパティの1つがオブジェクトのArrayListであり、シリアル化されています。私はリストの要素の1つを削除し、エンティティを永続化しようとしています。すべてがローカルではうまく動作しますが、展開するとうまく動作しません。GAE - オブジェクト(DataNucleus&JDO)を削除してもリストが維持されない

マイコード:

@Inject 
public Repository<User> userRepo; 
... 
Leader leader = (Leader) item.getModelObject(); 
... 
MySession.get().getUser().getLeaders().remove(leader); 
JDOHelper.makeDirty(MySession.get().getUser(), "leaders"); 
userRepo.persist(MySession.get().getUser()); 

プロパティ定義Userエンティティで:私はDataNucleusのコアバージョン1.1.6、jdo2-API 2.3-EBとDataNucleusの-AppEngineの1.0を使用しています

@Persistent(defaultFetchGroup = "true", serialized = "true") 
@Extension(vendorName = "datanucleus", key = "gae.unindexed", value = "true") 
private ArrayList<Leader> leaders = new ArrayList<Leader>(); 

。 10

新しいアイテムをリストに追加すると問題はありませんが、削除するときはうまくいかないのですが、それはなぜですか?そして、どうすればそれを機能させることができますか?汚れた何かを作る

+0

と同等のものを持っているあなたのコードを表示してください。コードを見ることなく、無神経な推測しか推測せず、行うことはできません。 – jmort253

+0

[OK]を、詳細を私の質問を更新しました。私はそれが十分であることを望む。 – Paul

+0

私は、データの核を疑うと、オブジェクトを保存しないように自問していました。あなたは私がオブジェクトからコレクションを抽出する必要があり、その後、再度追加することを見つけた – ori

答えて

0

は、それが汚いと、何よりもなります。持続/フラッシュは、次のトランザクションの開始(JDO/JPA仕様に従って)またはPM/EMの終了後に発生します。 makePersistent/persistの呼び出しはそれを変更しません。これはDataNucleusではなく、オブジェクトを永続させないために「それ自身を決定する」ことではなく、単に仕様に従ったものです。

最近のGAEリリース(v2.0)を使用する場合は、非トランザクションのアトミックな永続/削除(仕様の拡張)を行うことができます。 SVN trunk(v2.1)を使用している場合は、非トランザクションのアトミック更新(さらに拡張)を行うこともできます。最新のコードを持つすなわちあなたはJDBC「自動コミット」

+0

私はそれの背後にいくつかの論理がなければならないことを知っています、それを取り巻くすべてについての私の知識はかなり限られています。 2.0バージョンは十分安定していますか?私はそれのベータ版だけを覚えています。DataNucleusの機能性に関しては、私のバージョンは本当に古くなっているので、将来的には確実にアップグレードするつもりです。 現在のバージョンではどのようにして実現できますか?それは、オブジェクトを永続させるときにすべての変更が保存されるようにする方法です。オブジェクトは永続しているので、コレクション/直列化されたフィールドは永続化されないという問題だけです。 – Paul

+0

2.xはGoogles v1.xよりも多くのテストに合格していますので、私の本では「安定しています」;-) v1.0で動作するものは本当に答えることはできません。プラグイン。その周りにtxnを試してみませんか?直後にtxn begin/commitを入れてみてください。ログを見て、どうなるかを見てください。それを汚すことで、b)。 txnの開始/コミット時。 – DataNucleus

+0

2.xにアップデートするのがベストな選択肢になると思います。 – Paul

関連する問題