谷歌数据存储对象化存储问题与地图
问题描述:
remove(0)
在列表中只有一个元素map
正在使属性从实体中消失,同时使用对象化保存到谷歌数据存储。谷歌数据存储对象化存储问题与地图
“map
”是数据存储实体中的属性。
Map<String, List<String>> map;
以下代码使地图属性从数据存储器中消失时对应于该键"dress"
列表具有即使对应于其他的键仅一个元件保存后有与任何数目的元素的列表。
map.get("dress").remove(0)
注意:如果列表中有多个元素,则不会发生该问题。
答
原来地图被保存在Objectify 5.1.8版本一直到5.1.12一直存在一个错误。我们升级到5.1.13,现在这个工作。
答
了Java SDK的默认行为是(从the docs)如下:
- 空属性被写成空到数据存储
- 空的集合写成空到数据存储
- null从数据存储区读取为空
- 将空集合读取为空。
你可以改变这样的空列表使用
System.setProperty(DatastoreServiceConfig.DATASTORE_EMPTY_LIST_SUPPORT, Boolean.TRUE.toString())
务必开启该功能之前阅读上面列出的文档部分保存;它列出了几个需要注意的注意事项。
+0
正如在问题的评论中提到的,我面临的问题是地图消失。 –
你的意思是在地图上有一个空列表和其他元素导致整个列表被丢弃?听起来像是一个bug。 –
是的。只有当列表变空时移除元素时,整个地图才会被丢弃。 –
@Eric其实我刚才注意到,即使你在实体中只有一个列表属性,并且当你删除列表中的最后一个元素,整个列表也会被丢弃。我希望那里有一个空的列表。 –