“hashmap不是受支持的属性类型”-嵌入带有objectify 4的Map

hjzp0vay  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(296)

我正在尝试在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)

有什么建议吗?

r6l8ljro

r6l8ljro1#

@embedmap只适用于字符串键,它通过在实体上创建类似“foo.bar.yourkeyhere”的属性来工作。这不是一个非常复杂的机制。
你到底想做什么?您可能还希望考虑mapify注解和嵌入式集合。

dffbzjpn

dffbzjpn2#

读者应该注意到,Objectify4.1于2014年3月28日发布,它对嵌入的处理进行了重大更改(这与本文相关)。这是一个重大的改进,得益于google最近对底层数据存储api的改进。
公告如下:
https://groups.google.com/forum/#!主题/对象化外观/sbhig wcdni

相关问题