在db4o中创建对象时限制子对象的重复
这是一个非常常见的情况,但我有点新使用ORM,特别是在Android中,所以你的帮助会很棒。
范围:对象,例如消息具有其他对象的原始字段和字段(子),例如,讨论。 所以它看起来像:
public class Message {
private int id;
private String text;
private Discussion discussion;
public Message(int id, String text, int discussionId){
this.id=id;
this.text=text;
discussion = new Discussion (discussionId);
}
}
public class Discussion {
private int id;
private String title;
public Discussion(int id) {
this.id = id;
this.title = "Sample title";
}
}
note :: id由服务器提供,这就是为什么它是由手工设置的。
问题:如你所知,多条消息可能属于一个讨论。 但是当我存储消息列表时,我得到重复讨论的表(与消息表的大小相同)。 如何避免它?
在这里,我如何存储Message ArrayList:
ArrayList<Message> itemsList = new ArrayList<Message>;
itemsList.add(new Message(1, "Message 1", 50));
itemsList.add(new Message(2, "Message 2", 50));
ItemDBProvider dbProvider = new ItemDBProvider();
for (Item item:itemsList) {
dbProvider.store(item);
}
dbProvider.getDB().commit();
dbProvider.close();
我的意思是,不知何故db4o应该检查Discussion对象是否已经在db中(通过“id”字段)并限制创建重复。 这是真的吗?
Db4o不知道你想要合并不同的讨论对象,因为它们具有相同的id字段。 Db4o通过它们的标识(即==
运算符)区分对象,而不是对象的任何字段。 数据库中可以有数百个相同的对象。
没有理由为每条Message
创建一个新的Discussion
对象 - 检索现有的对象,并将其设置为新消息对象的discussion
区域。