Spring Data MongoDB supprime la colonne __class

Spring Data MongoDB supprime la colonne _class

Par défaut, lesMappingMongoConverter de SpringData ajoutent une colonne supplémentaire «_class» pour chaque objet enregistré dans MongoDB. Par exemple,

public class User {

    String username;
    String password;

    //...getters and setters
}

Sauvegarde le

    MongoOperations mongoOperation = (MongoOperations)ctx.getBean("mongoTemplate");
    User user = new User("example", "password123");
    mongoOperation.save(user, "users");

Résultat

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

SpringData a créé ce «_class» supplémentaire pour unreason. Pour supprimer ces «_class» supplémentaires, remplacez lesMappingMongoConverter et passez unnew DefaultMongoTypeMapper(null).

Ici, nous vous montrons comment supprimer la _classe de manière annotée ou XML.

1. Annotation

@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

Même chose, mais dans un fichier XML.




 

 
    
 

 
    
    
    
 

 
    
    
 

3. Testez-le à nouveau

Enregistrez-le à nouveau, la «_classe» a disparu.

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