美文网首页
java-springDataMongo-MapKey

java-springDataMongo-MapKey

作者: 落花流水似无意 | 来源:发表于2016-03-23 10:31 被阅读0次

    问题描述

    在使用spring-data-mongodb-1.7.0.RELEASE.jar的时候,当我们存储的Map的key中含有“.”dot时,那么程序就会报错:

    org.springframework.data.mapping.model.MappingException: Map key foo.bar.key contains dots but no replacement was configured! Make sure map keys don't contain dots in the first place or configure an appropriate replacement! at org.springframework.data.mongodb.core.convert.MappingMongoConverter.potentiallyEscapeMapKey(MappingMongoConverter.java:622) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeMapInternal(MappingMongoConverter.java:586) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.createMap(MappingMongoConverter.java:517) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:424) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:451) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writePropertyInternal(MappingMongoConverter.java:451) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:386) at org.springframework.data.mongodb.core.convert.MappingMongoConverter$3.doWithPersistentProperty(MappingMongoConverter.java:373) at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:257) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:373) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.writeInternal(MappingMongoConverter.java:345) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:310) at org.springframework.data.mongodb.core.convert.MappingMongoConverter.write(MappingMongoConverter.java:77) at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:859) at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:806) at ?org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:794)

    这个错误出现的原因是因为 源代码

    Spring => "MappingMongoConverter.java"

    /** 
    * Potentially replaces dots in the given map key with the configured map key       
    * replacement if configured or aborts * conversion if none is configured. 
    * @see #setMapKeyDotReplacement(String) 
    * @param source
    * @return */ 
        protected String potentiallyEscapeMapKey(String source)
       { 
              if (!source.contains(".")) 
              { 
                  return source; 
               } 
    
            if (mapKeyDotReplacement == null) 
            {
                 throw new MappingException(String.format(
                    "Map key %s contains dots but no replacement was configured! Make " + 
                    " sure map keys don't contain dots in the first place or configure an appropriate replacement!", source))
              } 
              
          return source.replaceAll("\\.", mapKeyDotReplacement); 
         
        }
    

    解决方法

    <bean   id="mongoMoxydomainConverter"
        class="org.springframework.data.mongodb.core.convert.MappingMongoConverter">
       <constructor-arg index="0" ref="mongoDbFactory" />
       <constructor-arg index="1">
               <bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/
       </constructor-arg>
      <property name="mapKeyDotReplacement" value="\\+"/>
    </bean>
    

    相关文章

      网友评论

          本文标题:java-springDataMongo-MapKey

          本文链接:https://www.haomeiwen.com/subject/nimllttx.html