使用App Engine持久化HashMap

时间:2012-05-21 04:15:20

标签: google-app-engine objectify

我有一个类似于这个的课程:

public static class Stats implements Serializable {
    private static final long serialVersionUID = 1L;        
    @Persistent(serialized = "true", defaultFetchGroup="true")
    private Map<String, Integer> requests;

    public Stats() {
        requests = new HashMap<String, Integer>();
    }
}

然而,Appengine抱怨HashMap is not a supported property type.

如何用Appengine存储“HashMap”?还有其他解决方法吗?

2 个答案:

答案 0 :(得分:1)

看起来你正在使用JDO。请参阅supported JDO集合类型。您可以考虑是否可以使用其中一种受支持的集合类型来表示您的数据,或者您可以将HashMap存储为序列化字段。

答案 1 :(得分:1)

您可能想看看EmbeddedEntity。它不是官方的Javadoc,但很快就会出现。请参阅1.6.6 SDK pre-release announcement on AE group

另一种解决方案可能是将地图序列化为Blob属性,例如

ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream writer;

try {
   writer = new ObjectOutputStream(out);
   writer.writeObject(requests);
   writer.close();

  Blob requestsMapAsBlob = new Blob(out.toByteArray());

} catch (Exception e) {
  // TODO: handle exceptions 
}

然后,您可以使用readObject()

从该blob恢复地图