Mongo的morphia读取Map<String>>类型数据的问题「建议收藏」

Mongo的morphia读取Map<String>>类型数据的问题「建议收藏」      最近一直使用morphia,给mongo数据查询带来很多遍历,但是最近项目遇到了一个严重的问题,在从Mongo数据库中查询Map&lt;String, List&lt;Object&gt;&gt;字段时,针对value值为空list时(即[ ]),竟然读到数据的严重问题,具体描述如下: 1.Entity数据结构:      import org.mongodb.morph…

大家好,又见面了,我是你们的朋友全栈君。

      最近一直使用morphia,给mongo数据查询带来很多遍历,但是最近项目遇到了一个严重的问题,在从Mongo数据库中查询Map<String, List<Object>>字段时,针对value值为空list时(即[ ]),竟然读到数据的严重问题,具体描述如下:

 1.Entity数据结构:     

 

import org.mongodb.morphia.annotations.Embedded;
import org.mongodb.morphia.annotations.Property;

import java.util.List;
import java.util.Map;

/**
 * Created by lance on 2017/6/14.
 */
public class MyEntity {

    @Property("id")
    private String id;
    @Property("name")
    private String name;
    @Property("description")
    private String description;

    

    @Embedded
    private Map<String, List<SubEntity>> mySubEntity;

    public static class SubEntity {
        @Property("subName")
        private String subName;
        @Property("subDescription")
        private String subDescription;
    }
}

 

 

 

2.数据在mongo数据库中的存储格式:

 

{
 "_id" : ObjectId("5940b1643db71d944c800445"),
 "name" : "myEntity name test",
 "description" : "myEntity description test",
 "MapEntity" : {
        "entity1" : [
            {
                "name" : "lance",
				"description":"lance-description"
            }
        ],
		"entity2" : []
    }
	
}

 

 

 

3.读取数据库中数据的代码:

  

import org.bson.types.ObjectId;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.query.Query;

/**
 * Created by lance  on 2017/6/14.
 */
public class MyEntityDao {

    private Datastore datastore;

    public MyEntity getMyEntityById(String Id) {
        Query<MyEntity> query = datastore.createQuery(MyEntity.class);
        query.criteria("_id").equal(new ObjectId(Id));
        return query.get();
    }
}

 

 

 

 4. 读取结果:

 

{
 "_id" : ObjectId("5940b1643db71d944c800445"),
 "name" : "myEntity name test",
 "description" : "myEntity description test",
 "MapEntity" : {
        "entity1" : [
            {
                "name" : "lance",
				"description":"lance-description"
            }
        ],
	"entity2" : [
	    {
                "name" : "lance",
		 "description":"lance-description"
            }
	 ]
    }
	
}

 

5.结果分析:

 

     5.1  数据库中保存的”entity2″ : 为空[ ] ,而使用morphia获取到的Entity为

 

"entity2" : [
	    {
                "name" : "lance",
		 "description":"lance-description"
            }
	 ]

 和entity1 相等,MyEntityDao获取的值错误,会给业务带来严重的问题。

 

    5.2  当”entity2″值不是[ ]时,能够获取到正确的结果。

 

  6.解决方式:

   将MyEntity数据保存到Mongo数据库中时,禁止Map<String, List<SubEntity>> mySubEntity的map中的key为[ ]的数据保存到数据库中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149548.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • ajax发送异步请求四个步骤,AJAX的异步请求的四个步骤[通俗易懂]

    ajax发送异步请求四个步骤,AJAX的异步请求的四个步骤[通俗易懂]ajax异步请求详解ajaxajax定义:异步的JavaScript和xml浏览器一、建立对象,XMLHttpRrquest的出现才有了异步处理。服务器XMLHttpRrquest是AJAX的基础异步全部的现代浏览器均支持XMLHttpRrquest对象(IE5和IE6使用ActiveObject)asyncXMLHttpRrquest用于在后台与服务器交换数据。这意味着能够在不从新加载整个网页的…

    2022年5月17日
  • wireshark抓包分析——TCP/IP协议[通俗易懂]

    wireshark抓包分析——TCP/IP协议[通俗易懂]本文来自网易云社区当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。Wireshark是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。Wireshark下载安装,略。注意,若在Windows系统安装Wireshar…

    2022年9月7日
  • 画平行线的步骤口诀_长轴的简化画法

    画平行线的步骤口诀_长轴的简化画法平行线的判定方法是初中数学必须要掌握的知识,但有些同学不太熟悉平行线的判定方法,总会出现丢分的现象,我们一起来看一下常用的平行线的判定方法。(1)平行线的定义法在同一平面内,不相交的两条直线叫做平行线。直线a与b平行,则a∥b(2)平行线的传递性如果两条直线都与第三条直线平行,那么这两条直线也互相平行。也就是说:如果b∥a,c∥a,那么b∥c例题:如图,直线a∥b,b∥c,c∥d,那么a∥d吗?…

    2022年9月20日
  • Office2016简体中文专业版32/64

    Office2016简体中文专业版32/64仅供参考链接:https://pan.baidu.com/s/1-rUA6atszrSxkm1aMLO7AQ提取码:1jne

    2022年7月19日
  • 谷歌的发明者(天才纨绔)

    导读:本文为《金融时报》网站发表的一篇人物特写,文章的主角是GoogleChromeV8引擎的开发者拉斯巴克(LarsBak)。他是一个编程天才,却远离计算机世界的核心,在丹麦为Google工作。LarsBak在他的农场远离计算机世界核心奥尔胡斯(Aarhus)是丹麦第二大城市,也是日德兰半岛(Jutland)的非正式首府。在该市郊外5英里的地方,有一座改造过的农舍。里面有宽敞的木地

    2022年4月16日
  • Integer包装类_entityframework面试题

    Integer包装类_entityframework面试题Integer 包装类面试

    2022年4月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号