【发布时间】:2012-08-21 23:29:55
【问题描述】:
我正在使用 db4o 8.0。
我有课
PostedMessage{
@Indexed
long receivedTime;
@Indexed
long sentTime;
...
//getter methods and setter methods for all the fields.
}
我将 PostedMessage 对象持久保存到 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,我需要为 PostedMessage 类的字段添加索引。 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 注释。
【问题讨论】: