我正在尝试在objectify4(和gaesdk1.9.0)的实体中嵌入一个Map。
文档(这里)显示如下内容:
@Embed
class LevelTwo {
String bar;
}
@Entity
class EntityWithEmbeddedCollection {
@Id Long id;
List<LevelOne> ones = new ArrayList<LevelOne>();
}
所以首先我尝试做同样的事情,但是使用hashmap<long,leveltwo>。当我试图保存实体时,这导致了运行时错误。
然后我读到了@embedmap,它是ofy的最新添加。于是我尝试了以下公式:
class LevelTwo {
Integer one;
Boolean bee;
}
class EntityWithEmbeddedCollection {
@Id Long id;
@EmbeddedMap
Map<Long, LevelTwo> ones = new HashMap<Long, LevelTwo>();
}
我也尝试将leveltwo作为一个内部静态类和其他一些变体,但我总是得到:
com.googlecode.objectify.SaveException:
Error saving com.myapp.UserInfoSvr@96: items: java.util.HashMap is not a supported property type.
at com.googlecode.objectify.impl.Transmog.save(Transmog.java:105)
有什么建议吗?
2条答案
按热度按时间r6l8ljro1#
@embedmap只适用于字符串键,它通过在实体上创建类似“foo.bar.yourkeyhere”的属性来工作。这不是一个非常复杂的机制。
你到底想做什么?您可能还希望考虑mapify注解和嵌入式集合。
dffbzjpn2#
读者应该注意到,Objectify4.1于2014年3月28日发布,它对嵌入的处理进行了重大更改(这与本文相关)。这是一个重大的改进,得益于google最近对底层数据存储api的改进。
公告如下:
https://groups.google.com/forum/#!主题/对象化外观/sbhig wcdni