spring mongodb中去掉_class列

來源:互聯網
上載者:User

標籤:

調用mongoTemplate的save方法時, spring-data-mongodb的TypeConverter會自動給document添加一個_class屬性, 值是你儲存的類名. 這種設計並沒有什麼壞處. spring-data-mongodb是為了在把document轉換成Java對象時能夠轉換到具體的子類. 但有時候我們並不希望出現這個欄位, 主要是看上去會比較"煩". 可以通過設定MappingMongoConverter的MongoTypeMapper來解決這個問題.

 

DefaultMongoTypeMapper類的建構函式的第一個參數是Type在MongoDB中名字. 設定為null的話就不會在儲存時自動添加_class屬性.所以需要覆寫 

 

spring的設定檔方式:

 

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

   

註解方式:

 

@EnableMongoRepositories(          basePackages = {"com.dhp"},          repositoryFactoryBeanClass = DHBMongoRepositoryFactoryBean.class  )  @PropertySource("classpath:mongo.properties")  @EnableMongoAuditing  public class MongoConfig extends AbstractMongoConfiguration {        @Value("${mongo.connectionString}")      private String connectionString;      @Value("${mongo.dbName}")      private String dbName;        @Autowired      private ApplicationContext appContext;        @Override      protected String getDatabaseName() {          return dbName;      }        @Override      @Bean      public Mongo mongo() throws Exception {          MongoClientURI mongoClientURI = new MongoClientURI(connectionString);          return new MongoClient(mongoClientURI);      }        @Override      @Bean      public MongoTemplate mongoTemplate() throws Exception {          MongoDbFactory factory = mongoDbFactory();            MongoMappingContext mongoMappingContext = new MongoMappingContext();          mongoMappingContext.setApplicationContext(appContext);            MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(factory), mongoMappingContext);          converter.setTypeMapper(new DefaultMongoTypeMapper(null));            return new MongoTemplate(factory, converter);      }          @Bean      public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {          return new PropertySourcesPlaceholderConfigurer();      }  }  

  

當使用Servlet 3初始化確保添加應用程式上下文到mongo中,如果不加上這兩句,會報異常:org.springframework.expression.spel.SpelEvaluationException
@Autowired
private ApplicationContext appContext;
mongoMappingContext.setApplicationContext(appContext);

spring mongodb中去掉_class列

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.