2011-06-11 85 views
10

我需要有兩個相同類型的對象。默認情況下,appengine不允許它,但我發現這個參數:datanucleus.appengine.allowMultipleRelationsOfSameType,所以我可以保存兩個相同類型的對象。AppEngine - 同類型的多個關係

在調試模式下,在調用makePersistent方法之前,我檢查了每個對象內的值,它們是不同的,但是,當我嘗試從數據存儲恢復值時,它們是相同的。兩者都有第二個對象的價值?

此代碼是保存對象FaseGAE:

manager = GAEDAOFactory.get().getPersistenceManager(); 
Key faseKey = KeyFactory.stringToKey(grupo.getFaseKey()); 
FaseGAE faseGAE = manager.getObjectById(FaseGAE.class, faseKey); 
faseGAE.addGrupoGAE(grupoGAE); 
faseGAE = manager.makePersistent(faseGAE); 
manager.close(); 

此代碼是獲取對象:

manager = GAEDAOFactory.get().getPersistenceManager(); 
FaseGAE faseGAE2 = manager.getObjectById(FaseGAE.class, faseKey); 

FaseGAE對象:

@PersistenceCapable 
public class FaseGAE { 

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

    @Persistent private List<GrupoGAE> grupos; 

GrupoGAE對象:

@PersistenceCapable 
public class GrupoGAE { 

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

    @Persistent private List<MyClass1> list; 

MyClass1的對象:

@PersistenceCapable 
public class MyClass1 { 

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

    @Persistent private MyClass2 sameTypeObject1; 
    @Persistent private MyClass2 sameTypeObject2; 
    @Persistent private String testValue1; 
    @Persistent private String testValue2; 

MyClass2對象:

@PersistenceCapable 
public class MyClass2{ 

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

testValue1和testValue2保持不同的值,但sameTypeObject1和sameTypeObject2具有sameTypeObject2的值。我檢查了數據存儲,並用不同的值創建了這兩個對象。這似乎都指向相同的參考。

我做錯了什麼?
它缺少使用相同類型關係的東西嗎?
肯定AppEngine不允許相同的類型關係?

+0

你將需要包含一些源代碼來演示這個問題。如果你在談論JDO或其他框架,這裏就不清楚了。 – 2011-06-12 03:11:29

+0

是的,我正在使用JDO。 – david 2011-06-14 01:44:01

+0

我只是打電話給manager.makePersistent(myClass);而myClass有兩個不同的mySubClass,它們具有不同的屬性。但是,當我從manager.getObjectById(myClass.class,myClassKey)從數據存儲中獲取myClass;兩個子類中的屬性都是相等的。 Thx爲您提供幫助! – david 2011-06-14 01:51:27

回答

1

我以前也遇到過類似的問題,我「米也不太清楚什麼是你確切的問題,以及是否是相同的,但希望這個答案至少會點你在正確的方向

不過,也有一對夫婦的「最佳實踐」,你可以用java與GAE時採用

1)實現Serializable接口的類 即公共類FaseGAE實現Serializable - 這將使持久化類存儲和Session對象檢索。

2)你可以嘗試使用對象化GAE數據存儲 http://code.google.com/p/objectify-appengine/

相關問題