2011-05-24 46 views
1

您是否能夠在App Engine上的嵌入類中存儲HashMap? 我有以下類別:嵌入類中的JDO - 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不可持久化

我知道你可以在一個「普通」類中成功使用HashMap,但是它們也可以在嵌入類中使用嗎?

感謝

+0

同樣的問題在我身邊。不同的是,我得到的錯誤消息是「HashMap不是受支持的屬性類型」(我的類不是EmbeddedOnly,可能會產生影響)。 – 2011-07-21 15:21:25

+0

http://groups.google.com/group/google-appengine-java/browse_thread/thread/2b42a00903a3441a討論了這個問題 - 儘管沒有有用的答案。 – 2011-07-21 15:24:46

回答

0

我還沒有與嵌入類試過,但我裏面JDO對象映射需要對包含類附加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>(); 

,我們不得不添加此類打開我們的數據管理器時使用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");