如何将db4o与Spring一起使用来配置索引?
我目前正在评估Spring-db4o集成。声明性事务支持以及易于提供声明性配置给我留下了深刻的印象 不幸的是,我很难想出如何在特定字段上创建索引。Spring正在tomcat服务器启动期间准备db。这是我的春季作品:如何将db4o与Spring一起使用来配置索引?,spring,indexing,db4o,Spring,Indexing,Db4o,我目前正在评估Spring-db4o集成。声明性事务支持以及易于提供声明性配置给我留下了深刻的印象 不幸的是,我很难想出如何在特定字段上创建索引。Spring正在tomcat服务器启动期间准备db。这是我的春季作品: <bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean"> <property name="configuration" ref="db4oConf
<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
<property name="configuration" ref="db4oConfiguration" />
<property name="databaseFile" value="/WEB-INF/repo/taxonomy.db4o" />
</bean>
<bean id="db4oConfiguration" class="org.springmodules.db4o.ConfigurationFactoryBean">
<property name="updateDepth" value="5" />
<property name="configurationCreationMode" value="NEW" />
</bean>
<bean id="db4otemplate" class="org.springmodules.db4o.Db4oTemplate">
<constructor-arg ref="objectContainer" />
</bean>
我在这个表中插入了大约6000行,然后使用SODA查询根据键检索一行。但是表现很差。为了验证索引是否已正确应用,我运行了以下程序:
private static void indexTest(ObjectContainer db){
for (StoredClass storedClass : db.ext().storedClasses()) {
for (StoredField field : storedClass.getStoredFields()) {
if(field.hasIndex()){
System.out.println("Field "+field.getName()+" is indexed! ");
}else{
System.out.println("Field "+field.getName()+" isn't indexed! ");
}
}
}
}
不幸的是,结果显示没有字段被索引
在类似的上下文中,在OME浏览器中,我看到有一个选项可以在每个类的字段上创建索引。如果我将索引设置为true并保存,它似乎将更改应用于db4o。但是,如果在db4o文件上运行这个示例测试,它不会显示任何索引
对此,我们将非常感谢您的指点。不幸的是,我对db4o的spring扩展不太了解 但是,Db4o.configure()内容已被弃用,其工作方式与早期版本不同。在早期版本中,有一个全局db4o配置。不是,这个配置已经不存在了。调用Db4o.configure()不会更改运行对象容器的配置 现在,您可以尝试在一个正在运行的容器周围执行此操作:
container.ext().configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
这样可以更改正在运行的对象容器的配置。请注意,更改正在运行的对象容器的配置可能会导致危险的副作用,只能作为最后手段使用。不幸的是,我对db4o的spring扩展不太了解 但是,Db4o.configure()内容已被弃用,其工作方式与早期版本不同。在早期版本中,有一个全局db4o配置。不是,这个配置已经不存在了。调用Db4o.configure()不会更改运行对象容器的配置 现在,您可以尝试在一个正在运行的容器周围执行此操作:
container.ext().configure().objectClass(com.test.Metadata.class).objectField("id").indexed(true);
这样可以更改正在运行的对象容器的配置。请注意,更改正在运行的对象容器的配置可能会导致危险的副作用,只能作为最后手段使用