gpt4 book ai didi

java - 将多个对象合并为 Morphia 的复杂对象的问题

转载 作者:行者123 更新时间:2023-11-30 11:48:06 25 4
gpt4 key购买 nike

我正在尝试将这三个对象合并为一个复杂对象:

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 将 Person 对象保存在 MongoDB 中,这就是我希望我的文档布局的方式。我创建了一个文档生成器,可以组合每个对象的列表。每个人都会获得所有事件的列表,但只能收到特定的礼物。虽然我的文档生成器确实创建了一个 Morphia 可以保留的文档,但只有最后一个收件人的礼物(排序顺序)被插入到所有人的事件中。虽然是为了正确的事件。

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)
}
}

如果我稍微修改代码以通过删除外部循环并让方法为 Persons 列表的特定索引获取参数来一次处理一个人:

public void merge(int p) {
Person person = listOfPersons.get(p);
//...and so on

我得到了一个完整的 Person 对象和正确的礼物。如果尝试将此修改后的版本送入循环,问题又来了。我试过使用常规的 for 循环和同步集合。我试过使用 Google Guava 的 ImmutableArrayList,但仍然没有成功。我知道问题是我在访问列表时正在更改列表,但无论如何我都找不到。我写了一个直接使用 MongoDB 驱动程序的 DAO,它可以正常工作,但是它的代码多了很多,而且非常丑陋。我真的希望这种方法起作用,答案就在我面前,但我就是看不到。任何帮助将不胜感激。

最佳答案

这是你的问题:

List<Gift> somePersonsGifts = new ArrayList<Gift>();               
....
event.setGifts(somePersonsGifts);

您只能为一个人添加礼物;如果您想将所有礼物聚合到事件中,请重新使用现有列表。

关于java - 将多个对象合并为 Morphia 的复杂对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com