開発者ドキュメント

SpringデータMongoDBの__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("mkyong", "password123");
    mongoOperation.save(user, "users");

結果

> db.users.find()
{
    "__class" : "com.mkyong.user.User",
    "__id" : ObjectId("5050aef830041f24ff2bd16e"),
    "password" : "new password", "username" : "mkyong"
}

SpringDataはhttp://stackoverflow.com/questions/6810488/spring-data-mongodb-mappingmongoconverter-remove-class/[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ファイルにあります。

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

3.もう一度試す

もう一度保存してください。 “__class”はなくなりました。

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

参考文献

フォーラム – MappingMongoConverter remove __class]

モバイルバージョンを終了