从mongodb文档中删除_class

时间:2012-05-08 15:06:27

标签: java mongodb spring-mvc

我们都知道,如果我们尝试通过spring-mvc向mongodb添加文档,spring会将_class添加到track&便于将来对文件进行编组/解组。如果成为开销,可能不希望在mongodb中包含_class。以下简单的spring配置有助于避免在mongodb中添加_class。

<bean id="defaultTypeMapper"
class="org.springframework.data.mongodb.core.convert.DefaultTypeMapper">
<property name="typeKey"><null/></property>
</bean>

<bean id="defaultMongoConverter"
class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mappingContext" ref="mappingContext" />
<property name="typeMapper" ref="defaultTypeMapper"></property>
</bean>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<constructor-arg name="mongoConverter" ref="defaultMongoConverter" />
<property name="writeResultChecking" value="EXCEPTION" />
</bean>

可以轻松找到mongodbFactory和mappingContext的配置。所以我没有在这里添加它。请注意我包含typeKey的方式。

1 个答案:

答案 0 :(得分:2)

问题是:如何抑制spring框架添加到MongoDB对象以支持多态的_class条目。如果您不需要多态支持,_class会浪费空间并在您将POJO /模型类重构为不同的包时引入问题。

上面的示例很接近,但有一些错误(例如,DefaultTypeMapper应该是DefaultMongoTypeMapper,而typeKey是构造函数arg,不设置为属性)。

以下为我工作......

<mongo:mongo host="hostname" port="27017">
    <mongo:options
        ...options...
</mongo:mongo>

<mongo:db-factory dbname="blee" username="blee" password="blee" mongo-ref="mongo"/>

<bean id="mongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper">
    <constructor-arg name="typeKey"><null/></constructor-arg>
</bean>

<bean id="mongoMappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" />

<bean id="mongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
  <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
  <constructor-arg name="mappingContext" ref="mongoMappingContext" />
  <property name="typeMapper" ref="mongoTypeMapper"></property>
</bean>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    <constructor-arg name="mongoConverter" ref="mongoConverter" />
    <property name="writeResultChecking" value="EXCEPTION" /> 
</bean>