Spring Boot和MongoDB如何删除'_class'列?

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)


Sri*_*i K 8

您可以通过以下代码删除 _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)


RZe*_*Zet 7

这是一个稍微简单的方法:

@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)


Dav*_*yer 5

我认为您需要创建一个@Beantype MongoTemplate并显式设置类型转换器。详细信息(非引导但仅提取模板配置):http : //www.mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/