资讯专栏INFORMATION COLUMN

spring data mongo @Field 失效问题

cnTomato / 2821人阅读

摘要:问题使用直接为字段添加新值为,为时,配置的别名不会被成功映射。对于,会当作是个数组,为被操作的秩,属性在中有定义可以成功映射。对于,会当作是有层级关系。最终会指向这个方法中出问题的就是这行代码又会调用

问题
@Field("fs")
public Map favoriteStickers = new LinkedHashMap<>();

使用MongoTemplate直接为favoriteStickers字段添加新值key为STICKER@10002,value为1时,@Field配置的别名不会被成功映射。

mongoTemplate.upsert(query(where("uid").is(1), new Update().set("favoriteStickers.STICKER@10002", 1), UserSticker.class);
原因

MongoTemplate会将执行语句中的key(上面的 uidfavoriteStickers.STICKER@10002 )映射成MongoDB中对应的字段,如果在UserSticker类的定义中有相应的配置则会按配置映射。例如问题字段使用的@Field就是用来配置别名的。

对于favoriteStickers.12 , 会当作favoriteStickers是个数组,12为被操作的秩,favoriteStickers属性在UserSticker中有定义可以成功映射。
对于favoriteStickers.STICKER@10002,会当作是有层级关系。即当作favoriteStickers是一个对象,该对象的定义中有一个STICKER@10002属性,如果没有不做映射。favoriteStickers是一个map所以无法映射。

重要源码

org.springframework.data.mongodb.core.convert.QueryMapper#getMappedObject(org.bson.conversions.Bson, org.springframework.data.mongodb.core.mapping.MongoPersistentEntity)方法就是直接用来映射对象的,在这个方法中的代码Field field = createPropertyField(entity, key, mappingContext);是用来构建字段的映射关系。

最终会指向org.springframework.data.mongodb.core.convert.QueryMapper.MetadataBackedField#getPath(java.lang.String)这个方法中出问题的就是PropertyPath path = PropertyPath.from(pathExpression.replaceAll(".d+", ""), entity.getTypeInformation());这行代码又会调用org.springframework.data.mapping.PropertyPath#from(java.lang.String, org.springframework.data.util.TypeInformation)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71704.html

相关文章

  • MongoDB遇上Spring

    摘要:每个条件必须引用一个属性,并且还可以指定一种比较操作。如果省略比较操作符的话,那么这暗指是一种相等比较操作。 Spring-data对MongoDB进行了很好的支持,接下来就讲解一下关于Spring对MongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven构建 具体的工程代码大家可以访问我的Github地址:https://github.c...

    Lorry_Lu 评论0 收藏0
  • MongoDB遇上Spring

    摘要:每个条件必须引用一个属性,并且还可以指定一种比较操作。如果省略比较操作符的话,那么这暗指是一种相等比较操作。 Spring-data对MongoDB进行了很好的支持,接下来就讲解一下关于Spring对MongoDB的配置和一些正常的使用 我下面的工程使用的是Spring的Java配置的方式和Maven构建 具体的工程代码大家可以访问我的Github地址:https://github.c...

    fai1017 评论0 收藏0
  • 使用Spring Data MongoDB持久化文档数据

    摘要:介绍非关系型数据是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据提供了三种方式在应用中使用通过注解实现对象文档映射使用实现基于模板的数据库访问自动化的运行时生成功能注解将类型映射为文档这是一个文档指定覆盖默认的域名启用 介绍 NoSQL:not only SQL,非关系型数据 MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据 S...

    alighters 评论0 收藏0
  • 使用Spring Data MongoDB持久化文档数据

    摘要:介绍非关系型数据是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据提供了三种方式在应用中使用通过注解实现对象文档映射使用实现基于模板的数据库访问自动化的运行时生成功能注解将类型映射为文档这是一个文档指定覆盖默认的域名启用 介绍 NoSQL:not only SQL,非关系型数据 MongoDB是文档型数据,文档是独立的实体,文档数据库不适用于关联关系明显的数据 S...

    go4it 评论0 收藏0
  • spring data mongo比较两个字段查询

    实例 public long countBetweenFields(String userId){ Criteria criteria = new Criteria() { @Override public DBObject getCriteriaObject() { DBObject obj = ne...

    wall2flower 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<