问题描述
|
您是否可以在App Engine的嵌入式类中存储HashMap?
我有以下课程:
@Persistent(serialized = \"true\")
@Embedded
private Stats stats;
@PersistenceCapable
@EmbeddedOnly
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>();
}
}
但是,当我尝试将项目添加到HashMap并将其持久化时,出现以下错误:
指定的类com.google.appengine.api.datastore.Blob无法持久保存
我知道您可以在\“ normal \”类中成功使用HashMap,但它们也可以在嵌入式Class \中使用吗?
谢谢
解决方法
我还没有尝试使用Embedded类,但是我在JDO对象中的Maps需要在包含的类上附加FetchGroup批注...
@SuppressWarnings(\"serial
\")
@PersistenceCapable(identityType=IdentityType.APPLICATION,detachable=\"true\")
@FetchGroup(name=\"QueryAggregationJobJDO\",members={
@Persistent(name=\"appName\",recursionDepth=-1),etc....
public class QueryAggregationJobJDO extends AggregationJobJDO implements SystemObject {
@Persistent(serialized=\"true\") // this is string of app names and a count for each name found
public Map< String,Long > appName = new HashMap<String,Long>();
并且我们必须在打开DataManager时使用getFetchPlan()添加此类。
@Override
public boolean open() {
DataAreaManager dataAreaManager = new DataAreaManager();
dataAreaManager.setDataArea(VERSION_DATA_AREA);
if ((pm == null) || (pm.isClosed())) {
pm = PMF.get(type).getPersistenceManager();
pm.getFetchPlan().addGroup(\"TouchActiveUserJDO\");
pm.getFetchPlan().addGroup(\"UserRoleJDO\");
pm.getFetchPlan().addGroup(\"QueryAggregationJobJDO\");