SpringデータMongoDBの__class列の削除

Spring Data MongoDB remove _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("example", "password123");
    mongoOperation.save(user, "users");

結果

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

SpringDataは、reasonに対してこの余分な「_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ファイルです。




 

 
    
 

 
    
    
    
 

 
    
    
 

3. もう一度テストする

もう一度保存すると、「_ class」はなくなります。

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