2

エンティティがあり、プロパティの1つは、シリアル化されたオブジェクトのArrayListです。リストの要素の1つを削除して、エンティティを永続化しようとしています。すべてがローカルで正常に機能しますが、デプロイされたときは機能しません。

私のコード:

@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());

ユーザーエンティティのプロパティ定義:

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

datanucleus-coreバージョン1.1.6、jdo2-api 2.3-eb、datanucleus-appengine1.0.10を使用しています

リストに新しいアイテムを追加するときは正常に機能しますが、何かを削除するときは機能しません-なぜそうなのですか?そして、どうすればそれを機能させることができますか?

4

1 に答える 1

0

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

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

于 2012-05-11T08:41:18.450 に答える