2011-03-29 44 views
3

所以我一直在這個問題上停留了大約3周。我讀過這個:http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html,它似乎沒有工作。基本上我有一個持久對象,稱爲池,我需要將玩家添加到該池中。球員也是持久對象。我有一個游泳池和玩家之間的無主關係,游泳池有一組玩家ID(主鍵ID ...)添加到Google-appengine中的集合

所以我試過的東西: 1)我用一個Long作爲主鍵對於這兩個,這沒有奏效。 2)嘗試使用來自appengine的Key作爲主鍵,並且這不起作用,因爲您無法在客戶端使用Key的實現。沒有找到工作,我的數據傳輸對象是sl//凌亂/ errorprone/hackish和各種不良。 3)使用字符串作爲id,這樣的嘗試......

@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true") 
private String id; 

而且也不能工作。當我嘗試將字符串添加到其設置,像這樣...

public void addPlayers(Pool pool, List<String> players) { 
    PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager(); 

    try { 
     pm.currentTransaction().begin(); 
     Pool oldPool = pm.getObjectById(Pool.class, pool.getID()); 
     for(String id : players) { 
      oldPool.addPlayer(id); 
      System.out.println("Added id:" + id); 
     } 
     pm.currentTransaction().commit(); 
    } catch (Exception e) { 
     pm.currentTransaction().rollback(); 
     e.printStackTrace(); 
    } finally { 
     pm.close(); 
    } 

} 

它會靜靜地失敗。就像在...它不會堅持它們一樣。

任何建議將是偉大的。這是一個學校項目,不幸的是我不得不使用JDO在GWT中完成它。我的教授和助教都不能幫助我,因爲他們不熟悉GWT ...有趣...所以這是我的最後手段:)

謝謝!

+0

你的代碼與GWT有什麼關係? – 2011-03-29 07:37:05

+0

,因爲它使用谷歌應用程序引擎編寫...也許我錯過了什麼?這是一個在eclipse中的GWT項目... – Chris 2011-03-29 07:43:15

+0

在日誌中查找,在調試級別 – DataNucleus 2011-03-29 08:43:12

回答

1

雖然有充分的理由將您的關係表示爲實體「一方」的列表,但更常見的方法是讓「多方」的實體參照「一邊。也就是說,不是每個Pool都有一個Player列表,每個Player應該有一個對它所屬的單個Pool的引用。

你有沒有理由不採取這種方法?你試過了嗎?