Mongo的morphia读取Map<String, List<Object>>类型数据的问题
2017-06-14 18:21
771 查看
最近一直使用morphia,给mongo数据查询带来很多遍历,但是最近项目遇到了一个严重的问题,在从Mongo数据库中查询Map<String, List<Object>>字段时,针对value值为空list时(即[ ]),竟然读到数据的严重问题,具体描述如下:
5.2 当"entity2"值不是[ ]时,能够获取到正确的结果。
1.Entity数据结构:
import org.mongodb.morphia.annotations.Embedded; import org.mongodb.morphia.annotations.Property; import java.util.List; import java.util.Map; /** * Created by zhangzh 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 zhangzh 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为[ ]的数据保存到数据库中。相关文章推荐
- 通过递归将list<Map<String,Object>>类型的数据转换为tree组件可识别的json数据
- Android中将List<Map<String, Object>>类型数据与字符串的相互转化
- android 子线程通过bundle、handler.sendMessage(message)向主线程传输多个类型数据,包括list<Map<String,Object>>
- Android保存List<Map<String,Object>>数据到SD卡及读取
- Map<String,object>也可以存list这样的数据,那么1map怎么遍历 2map能不能替代list 3既然map和list可以存下任何类型的数据,那么单map就可以存下任何类型的数据
- List<Map<String, Object>>保存的是引用数据类型的地址
- jsp标签中遍历List<Map<String, List<Object>>>类型的数据
- List<Map<String, String>> 合并map的字段数据问题
- c标签遍历List<Map<String, Object>> 数据格式
- Mybatis 如何 返回 List<String> 类型 或 List<Map<String,Object>>类型
- List<Map<String, Object>> 转换成JSON数据格式保存再转List<Map<String, Object>> 返回
- android sharedpreferences 保存 list<Map<String,Object>>数据
- Gson 反序列化Map<String, Object>类型的小问题
- Android中List与Map<String,Object>及SimpleAdapter用来存储数据并展示出来的联合用法
- 笔记 freemark list标签迭代Map<Map<String,Object>集合排序问题
- 当需要对一个list<Map<String,Object>>中的map添加一个相同的数据是可以参考
- Mybatis查询表数据及其列名,返回List<Map<String,Object>>
- java如何解析json字符串(List<Map<String,Object>成功的类型)
- 行专列,拆分json,实现数据的展示。Map<String, Object>存储多个相同的key,List<Map<String, Object>>
- 如何将一个List<Map<String,String>>类型的集合数据转换成json格式输出