无法检索对象化嵌入映射



我在GoogleAppEngine托管的应用程序中使用Objectify作为数据访问层。

当我试图持久化地图时,问题就来了。我的豆子看起来像这样:

@Entity
@Cached
class MyBean{
    @Id 
    private Long id;
    @Embedded
    Map<String, String> parameters = new HashMap<String, String>();
    public MyBean(){}
    //getters and setters below
}

首先要注意的是,映射"parameters"不是私有的,它引发了JRE异常。保存地图时一切顺利。当从DataStore中检索它时,它会失败。

我的解决方法是使用@Serialized注释。这只是一个变通方法,因为我想要实现的是使用GAE数据存储的expando功能。

根据物化医生的说法,我做的是正确的操作。

异常详细信息:

由处的java.lang.NullPointerException引起com.googlecode.objectify.impl.Transmog.loadSingleValue(Transmog.java:364)在com.googlecode.objectify.impl.load.EmbeddedMapSetter.safeSet(EmbeddeMapSetter.java:65)在com.googlecode.objectify.impl.load.CCollisionDetectionSetter.set(CollisionDetectingSetter.java:37)在com.googlecode.objectify.impl.Transmog.loadSingleValue(Transmog.java:359)网址:com.googlecode.objectify.impl.Transmog.load(Transmog.java:340)com.googlecode.objectify.impl.ConcreteEntityMetadata.toObject(ConcreteEntityMetadata.java:203)在com.googlecode.objectify.impl.QueryImpl$ToObjectIterator.translate(QueryImpl.java:668)在com.googlecode.objectify.impl.QueryImpl$ToObjectIterator.translate(QueryImpl.java:657)在com.googlecode.objectify.util.TranslationIterator.next(TranslationIterater.java:35)

Objectify3中对嵌入式映射的支持很差,不应该公开发布。关于@Embedded Map的部分已从Objectify3文档中删除。

Objectify4广泛支持地图,包括这些expando风格的地图:

  • 贴图(或任何基本体)
  • 地图(主要参考资料)
  • 映射(嵌入式类

此外,还有一个@Mapify注释,可以让你获取一个普通的对象集合,选择一个属性作为键,并将其存储为Map。

不幸的是,Objectify4的文档目前还没有准备好。然而,该源代码正被多个方面积极使用。如果你觉得大胆,就从树干开始建造。

我还建议使用Objectify 4-我已经升级了我的应用程序,发现它很容易做到。我特别喜欢对Map类型字段的支持。

为了回答这个问题,您永远不应该将@Embedded放在只包含基元的数组中。因此,您不需要在地图上指定@Embedded,因为String是Google应用程序引擎数据存储中的基元。

最新更新