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

          spring的配置文件
            <mongo:db-factory dbname="somedb" host="localhost" port="27017" />

            
          <mongo:mapping-converter id="mongoConverter">
            
          </mongo:mapping-converter>

            
          <bean id="noClassMongoConverter" class="org.devside.mongodb.MongoConverterEnhanceFactoryBean">
              
          <property name="converter" ref="mongoConverter" />
            
          </bean>

            
          <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
              
          <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
              
          <constructor-arg name="mongoConverter" ref="noClassMongoConverter" />
            
          </bean>

          這 里關鍵的類org.devside.mongodb.MongoConverterEnhanceFactoryBean. 其實沒做什么特別的事情. 就是把spring-data的MappingMongoConverter拿過來,然后把TypeMapper設置一下.

          public class MongoConverterEnhanceFactoryBean implements FactoryBean<MappingMongoConverter> {

              
          private MappingMongoConverter converter;

              
          public void setConverter(MappingMongoConverter converter) {
                  
          this.converter = converter;
              }

              
          public MappingMongoConverter getObject() throws Exception {
                  MongoTypeMapper typeMapper 
          = new DefaultMongoTypeMapper(null);
                  converter.setTypeMapper(typeMapper);
                  
          return converter;
              }

              
          public Class<?> getObjectType() {
                  
          return MappingMongoConverter.class;
              }

              
          public boolean isSingleton() {
                  
          return true;
              }

          }

          DefaultMongoTypeMapper類的構造函數的第一個參數是Type在MongoDB中名字. 設置為null的話就不會在保存時自動添加_class屬性.
          具體javadocs看
          http://static.springsource.org/spring-data/data-mongo/docs/1.0.0.RELEASE/api/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapper.html
          posted on 2012-03-29 15:20 SIMONE 閱讀(704) 評論(0)  編輯  收藏 所屬分類: JAVA
          主站蜘蛛池模板: 梨树县| 柳河县| 泰和县| 石门县| 琼中| 游戏| 白沙| 鹿泉市| 霍州市| 鸡泽县| 灵寿县| 台江县| 防城港市| 钟祥市| 通化市| 清水县| 嘉祥县| 四平市| 梁平县| 洞头县| 康定县| 奈曼旗| 隆回县| 黄大仙区| 东台市| 河间市| 南昌县| 舟曲县| 三江| 长春市| 平阳县| 峡江县| 延津县| 新密市| 高陵县| 株洲市| 长泰县| 高雄县| 仲巴县| 永丰县| 辽源市|