こんにちは、子エンティティのリストを持つ A という親エンティティがあり、 List<B> children と言っています。
アプリケーションにとって重要であるため、子エンティティの順序を維持する必要があります。
私が行った方法は次を使用しています: https://developers.google.com/appengine/docs/java/datastore/jdo/relationships#Owned_One_to_Many_Relationships
順序付きコレクションが順序を維持する方法。
@Persistent
@Element(dependent = "true")
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="index ASC"))
private List objects;
今、私は次を使用してリストに追加します:
newObj.setIndex(0);
for (int i = 0; i < objList.size(); i++) {
objList.get(i).setIndex(i + 1);
}
objList.add(newObj);
次を使用して移動:
if (direction.equalsIgnoreCase("up")) {
objList.get(index).setIndex(index - 1);
objList.get(index - 1).setIndex(index);
}
else if (direction.equalsIgnoreCase("down")) {
objList.get(index).setIndex(index + 1);
objList.get(index + 1).setIndex(index);
}
そして、次を使用して削除します:
for (int i = index + 1; i < objList.size(); i++) {
objList.get(i).setIndex(i - 1);
}
objList.remove(index);
これは正しい方法ですか?追加と移動が機能しているようです。しかし、削除は奇妙な動作をします。ランダムなオブジェクトが削除され、リストが完全に矛盾した状態になります!
GAE: 1.7.2
DataNucleus エンハンサー (バージョン 3.1.0.m2)