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]