在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区域。

链接地址: http://www.djcxy.com/p/95951.html

上一篇: Restrict child duplicates on creating object in db4o

下一篇: Light weight alternative to Hibernate?