Spring Data MongoDB删除_class列

默认情况下,SpringData的MappingMongoConverter为MongoDB中保存的每个对象添加一个额外的“ _class ”列。 例如,

public class User {
		
	String username;
	String password;
	
	//...getters and setters
}

保存

MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");	
    User user = new User("mkyong", "password123");
    mongoOperation.save(user, "users");

结果

> db.users.find()
{ 
	"_class" : "com.mkyong.user.User", 
	"_id" : ObjectId("5050aef830041f24ff2bd16e"), 
	"password" : "new password", "username" : "mkyong" 
}

SpringData创建这个额外的“ _class ”是有原因的 。 要删除此额外的“ _class ”,请覆盖MappingMongoConverter ,并传递一个new DefaultMongoTypeMapper(null)

在这里,我们向您展示如何以注释或XML方式删除_class。

1.注释

@Configuration
public class SpringMongoConfig{

  public @Bean
  MongoDbFactory mongoDbFactory() throws Exception {
	return new SimpleMongoDbFactory(new Mongo(), "database");
  }

  public @Bean
  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

一样,但是在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>

3.再次测试

再次保存,“ _ class”消失了。

> db.users.find()
{ 
	"_id" : ObjectId("random code"), 
	"password" : "new password", "username" : "mkyong" 
}

参考文献

  1. StackOverflow – MappingMongoConverter删除_class
  2. Spring论坛– MappingMongoConverter删除_class

翻译自: https://mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值