Ограничить дочерние дубликаты при создании объекта в 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 должен проверить, находится ли объект обсуждения уже в db (по полю "id" ) и ограничивает создание дубликата. Это реально?

Ответ 1

Db4o не знает, что вы намерены объединить разные объекты обсуждения, так как они имеют одинаковое поле id. Db4o выделяет объекты по их идентичности (т.е. Оператор ==), а не любые поля объекта. Вы можете иметь сотни одинаковых объектов в базе данных.

Нет причин создавать новый объект Discussion для каждого Message - извлечения существующего и устанавливать его как поле Discussion вашего нового объекта сообщения.