- 默认情况下,Spring Data的
MappingMongoConverter
为MongoDb中的每个对象添加了一个额外的_class
列 -
> db.users.find() { "_class" : "com.zhangyong.user.User", "_id" : ObjectId("1010aef830041f24ff2bd16e"), "password" : "password", "username" : "zhangyong" }
-
Spring Data创建了额外的
_class
列。为了删除额外的_class
列,重写MappingMongoConverter
,传入new DefaultMongoTypeMapper(null)
-
下面介绍了两种删除
_class
的方法:注解和xml。 -
(1)注解
-
@Configuration public class SpringMongoConfig { @Bean public MongoDbFactory mongoDbFactory() throws Exception { return new SimpleMongoDbFactory(new Mongo(), "database"); } @Bean public MongoTemplate mongoTemplate() throws Exception { //remove _class MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory(), new MongoMappingContext()); converter.setTypeMapper(new DefaultMongoTypeMapper(null)); MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory(), converter); return mongoTemplate; } }
-
(2)xml
-
<mongo:mongo host="localhost" port="27017" /> <mongo:db-factory dbname="database" /> <bean id="mappingContext" class="org.springframework.data.mongodb.core.mapping.MongoMappingContext" /> <bean id="defaultMongoTypeMapper" class="org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper"> <constructor-arg name="typeKey"><null/></constructor-arg> </bean> <bean id="mappingMongoConverter" class="org.springframework.data.mongodb.core.convert.MappingMongoConverter"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <constructor-arg name="mappingContext" ref="mappingContext" /> <property name="typeMapper" ref="defaultMongoTypeMapper" /> </bean> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" /> <constructor-arg name="mongoConverter" ref="mappingMongoConverter" /> </bean>