2011-02-28 72 views
1

我正在開發一個Google App Engine項目,我正努力讓JDO中的關係正常工作。對象被正確保存,但相關對象不會顯示在數據存儲區查看器或查詢中。Google App Engine中的擁有關係不起作用

一個修整例如我的代碼是:


     @PersistenceCapable 
     public class Project implements Persistable { 


    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key id; 

    @Persistent(defaultFetchGroup = "true") 
    private Client client; 

     // Extra fields and getter and setters remove 

     } 

     @PersistenceCapable 
     public class Client implements Persistable { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key id; 

Representation r = null; 
     PersistenceManager pm = PMF.get().getPersistenceManager(); 

     try { 
      XMLToObject p = new XMLToObject(new org.everglade.tempus.persistence.dataobjects.Project()); 
      p.parse(xml); 
      org.everglade.tempus.persistence.dataobjects.Project proj = (org.everglade.tempus.persistence.dataobjects.Project) p.getObject(); 
      pm.makePersistent(proj); 
      getResponse().setStatus(Status.SUCCESS_CREATED); 
      getResponse().setLocationRef("/project/" + KeyFactory.keyToString(proj.getId())); 
     } catch (Exception e) { // Add finer exception handling here so can alter status based on what went wrong! 
      getResponse().setStatus(Status.SERVER_ERROR_INTERNAL); 
      Log.severe("The following error occurred whilst trying to add a new project: " + e.getMessage()); 
     } finally { 
      pm.close(); 
     } 

項目對象被保存但沒有客戶端與它相關聯 - 任何人都可以看到,爲什麼?這是我的第一款應用程序引擎應用程序,也使用JDO,因此它可能非常明顯!

在此先感謝!

回答

1

您應該知道App Engine上的所有關係與JDO規範有很大不同。擁有關係實際上創建了一個實體組這是一個存儲圖。更多的信息在這裏http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html

所以在大多數情況下,在應用程序引擎你最好引用其他對象的關鍵。除非你真的打算定義一個實體組圖。在同樣的說明中,我建議您避免使用大型繼承樹(上述相同參考鏈接中的信息)。

相關問題