我正在使用db4o 8.0。

我有一堂课

PostedMessage{
    @Indexed
    long receivedTime;
    @Indexed
    long sentTime;
    ...
    //getter methods and setter methods for all the fields.
}


我将PostMessage对象保留到db4o数据库中。我已经将15000+个对象保存到db4o数据库中。现在,当我运行以下查询时,它会导致OutOfMemoryError。

    //Query to get PostedMessages between "start" and "end" dates.
    Query q = db.query();
    q.constrain(PostedMessage.class);
    Constraint from = q.descend("receivedTime").constrain(new Long(start.getTimeInMillis())).greater().equal();
    q.descend("receivedTime").constrain(new Long(end.getTimeInMillis())).smaller().equal().and(from);
    q.execute();//results in OutOfMemoryError


为了避免OutOfMemoryError,我需要将索引添加到PostMessage类的字段。 Read This

我有服务器/客户端配置。打开它之前,我无法控制预配置ObjectContainer。

在刚刚打开并提供给我的ObjectContainer之后,我将必须应用/附加索引CommonConfiguration。

我知道如何创建配置。

    EmbeddedConfiguration appendConfig = Db4oEmbedded.newConfiguration();
    appendConfig.common().objectClass(EmailMessage.class).objectField("receivedTime").indexed(true);
    appendConfig.common().objectClass(EmailMessage.class).objectField("sentTime").indexed(true);


我无法弄清楚如何将此配置应用于已打开的ObjectContainer。
如何向刚打开的ObjectContainer添加索引?

EmbeddedConfigurationItem的apply()方法是答案吗?如果是,我可以获取示例代码来显示如何使用它吗?

编辑:稍后在问题中添加@Indexed注释。

最佳答案

Reference doc
@Indexed

10-08 00:35