Mar*_*rco 7 spring-data spring-boot
在将数据插入MongoDB时,Spring Data正在添加一个自定义的"_class"列,有没有办法在使用Spring Boot和MongoDB时消除"类"列?
或者我需要创建自定义类型映射器吗?
任何提示或建议?
Oli*_*ohm 13
戴夫的回答是正确的.但是,我们通常建议不要这样做(这就是为什么它首先默认启用),因为你有效地抛弃了持久化类型层次结构甚至是一个简单的属性集Object.假设以下类型:
@Document
class MyDocument {
  private Object object;
}
如果你现在设置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;
 }
}
您可以通过以下代码删除 _class。您可以在 mongo 配置类中使用它。
@Bean
    public MongoTemplate mongoTemplate(MongoDatabaseFactory databaseFactory, MappingMongoConverter converter) {
        converter.setTypeMapper(new DefaultMongoTypeMapper(null));
        return new MongoTemplate(databaseFactory, converter);
    }
这是一个稍微简单的方法:
@Configuration
public class MongoDBConfig implements InitializingBean {
    @Autowired
    @Lazy
    private MappingMongoConverter mappingMongoConverter;
    @Override
    public void afterPropertiesSet() throws Exception {
        mappingMongoConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
    }
}
我认为您需要创建一个@Beantype MongoTemplate并显式设置类型转换器。详细信息(非引导但仅提取模板配置):http : //www.mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/
| 归档时间: | 
 | 
| 查看次数: | 10670 次 | 
| 最近记录: |