私は、単一の複雑なオブジェクトにこれらの3つのオブジェクトをマージしようとしているため、複雑なオブジェクトに複数のオブジェクトをマージする問題:Morphia
はpublic class Person {
private String name;
private List<Event> events;
// getters and setters
}
public class Event {
private String name;
private List<Gift> gifts;
// getters and setters
}
public class Gift {
private String name;
private String recipient;// the name of the person
private String eventName;
// getters and setters
}
私の目標は、Morphiaを使用してMongoDBの中でPersonオブジェクトを保存することであり、この方法私は自分の文書をレイアウトしたい。私は、各オブジェクトのリストを組み合わせたドキュメントビルダを作成しました。各人物はすべてのイベントのリストを取得しますが、特定のギフトだけを受け取ることができます。私の文書作成者はMorphiaが保持できる文書を作成しますが、その最後の受信者(並べ替え順)のギフトだけがすべての人物のイベントに挿入されます。正しいイベントのためですが。私は外側のループを削除し、この方法は、人の特定のインデックスの引数を取ることによって一度に1人を処理するために少しのコードを変更する場合
public void merge() {
for (Person person : listOfPersons) {
for (Event event : listOfEvents) {
// somePersonsGifts: a sublist of gifts based on Event and Person.
List<Gift> somePersonsGifts = new ArrayList<Gift>();
for (Gift gift : listOfGifts) {
if (person.getName().equals(gift.getRecipient()) && gift.getEventName().equals(event.getName())) {
somePersonsGifts.add(gift);
}
}
event.setGifts(somePersonsGifts);
}
person.setEvents(listOfEvents)
}
}
リスト:
public void merge(int p) {
Person person = listOfPersons.get(p);
//...and so on
は、私は1つを取得します正しい贈り物でPersonオブジェクトを完成させる。この修正されたバージョンをループにフィードしようとすると、問題が戻ってきます。私は定期的なfor-loopsと同期したコレクションを使ってみました。私はGoogle GuavaのImmutableArrayListを使ってみましたが、まだ運がありません。私は、問題にアクセスしている間にリストを変更しているが、その周りには何も見つかりませんでした。私はMongoDBドライバを直接使用するDAOを作成しましたが、正しく動作しますが、コードはかなり多く、かなり醜いです。私は本当にこのアプローチを働かせたい、答えは私の前にあるが、私はそれを見ることができない。どんな助けでも大歓迎です。ここで
あなたはあなたの問題が何であるかを特定していませんでした。 –
同じリストを再利用しようとしましたが、問題は解決しません。私は十分に明確ではないことをお詫びします。私はすべての人にすべてのギフトを追加したくないので、私は最も内側のループに条件付きがあるのです。特定の名前と特定のイベントに一致するギフトを追加したいと思います。この現象は、現在のsomePersonGiftsリストをイベントに追加するときにそれを参照するのにコピーしていないという事実から来ていると強く信じています。そのため、somePersonGiftsリストの最後の値はすべてのコピーに保持されています。私のために努力してくれた皆様に感謝します。 –