posts - 495,comments - 227,trackbacks - 0
          調(diào)用mongoTemplate的save方法時(shí), spring-data-mongodb的TypeConverter會(huì)自動(dòng)給document添加一個(gè)_class屬性, 值是你保存的類(lèi)名. 這種設(shè)計(jì)并沒(méi)有什么壞處. spring-data-mongodb是為了在把document轉(zhuǎn)換成Java對(duì)象時(shí)能夠轉(zhuǎn)換到具體的子類(lèi). 但有時(shí)候我們并不希望出現(xiàn)這個(gè)字段, 主要是看上去會(huì)比較"煩". 可以通過(guò)設(shè)置MappingMongoConverter的MongoTypeMapper來(lái)解決這個(gè)問(wèn)題.

          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>

          這 里關(guān)鍵的類(lèi)org.devside.mongodb.MongoConverterEnhanceFactoryBean. 其實(shí)沒(méi)做什么特別的事情. 就是把spring-data的MappingMongoConverter拿過(guò)來(lái),然后把TypeMapper設(shè)置一下.

          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類(lèi)的構(gòu)造函數(shù)的第一個(gè)參數(shù)是Type在MongoDB中名字. 設(shè)置為null的話(huà)就不會(huì)在保存時(shí)自動(dòng)添加_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 閱讀(711) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JAVA
          主站蜘蛛池模板: 泾川县| 施甸县| 建宁县| 米泉市| 湄潭县| 新宾| 汶上县| 长宁区| 虞城县| 盐城市| 平南县| 清新县| 綦江县| 平遥县| 张家口市| 武安市| 同心县| 眉山市| 安阳市| 德安县| 博客| 遵义市| 临泉县| 巴林右旗| 贵德县| 五指山市| 丰镇市| 大城县| 浦城县| 曲阳县| 微山县| 凤庆县| 苍南县| 北流市| 霍州市| 崇明县| 吉安县| 周宁县| 张家口市| 苏尼特左旗| 九龙坡区|