Mar*_*rco 7 spring-data spring-boot
在将数据插入MongoDB时,Spring Data正在添加一个自定义的"_class"列,有没有办法在使用Spring Boot和MongoDB时消除"类"列?
或者我需要创建自定义类型映射器吗?
任何提示或建议?
Oli*_*ohm 13
戴夫的回答是正确的.但是,我们通常建议不要这样做(这就是为什么它首先默认启用),因为你有效地抛弃了持久化类型层次结构甚至是一个简单的属性集Object.假设以下类型:
@Document
class MyDocument {
private Object object;
}
Run Code Online (Sandbox Code Playgroud)
如果你现在设置object为一个值,它将很乐意保留,但是你无法将值读回原来的类型.
Jer*_*mie 12
关于该问题的最新答案,使用嵌入式mongo db进行测试用例:我引自http://mwakram.blogspot.fr/2017/01/remove-class-from-mongo-documents.html
Spring Data MongoDB在mongo文档中添加了_class来处理java继承的多态行为.如果要删除_class,只需在代码中删除Config类.
package com.waseem.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.convert.DbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@Configuration
public class MongoConfig {
@Autowired MongoDbFactory mongoDbFactory;
@Autowired MongoMappingContext mongoMappingContext;
@Bean
public MappingMongoConverter mappingMongoConverter() {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory);
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return converter;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下代码删除 _class。您可以在 mongo 配置类中使用它。
@Bean
public MongoTemplate mongoTemplate(MongoDatabaseFactory databaseFactory, MappingMongoConverter converter) {
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
return new MongoTemplate(databaseFactory, converter);
}
Run Code Online (Sandbox Code Playgroud)
这是一个稍微简单的方法:
@Configuration
public class MongoDBConfig implements InitializingBean {
@Autowired
@Lazy
private MappingMongoConverter mappingMongoConverter;
@Override
public void afterPropertiesSet() throws Exception {
mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
}
}
Run Code Online (Sandbox Code Playgroud)
我认为您需要创建一个@Beantype MongoTemplate并显式设置类型转换器。详细信息(非引导但仅提取模板配置):http : //www.mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/
| 归档时间: |
|
| 查看次数: |
10670 次 |
| 最近记录: |