2011-06-11 23 views
10

Aynı türde iki nesneye ihtiyacım var. Varsayılan olarak appengine buna izin vermez, ancak bu parametreyi buldum: datanucleus.appengine.allowMultipleRelationsOfSameType, böylece aynı tür nesneleri kaydedebilirim.AppEngine - Aynı Yazının Çoklu İlişkileri

Hata ayıklama modunda, makePersistent yöntemini çağırmadan önce her nesnenin içinde bir değer kontrol ettim ve bunlar farklıydı, ancak veri deposundaki değerleri kurtarmaya çalıştığımda bunlar aynıydı. Her ikisi de ikinci nesnenin değerine sahip miydi?

Bu kod nesneyi kaydetmek için FaseGAE geçerli:

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

FaseGAE nesnesi:

@PersistenceCapable 
public class FaseGAE { 

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

    @Persistent private List<GrupoGAE> grupos; 

GrupoGAE nesnesi:

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(); 

Bu kod nesneyi elde etmektir

@PersistenceCapable 
public class GrupoGAE { 

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

    @Persistent private List<MyClass1> list; 

sinif1 nesnesi:

@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; 

sinif2 Nesne: testValue1 ve testValue2 farklı değerler engellemekle birlikte sameTypeObject1 ve sameTypeObject2 sameTypeObject2 değerini var

@PersistenceCapable 
public class MyClass2{ 

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

. Veri deposunu kontrol ettim ve her iki nesne de farklı değerler ile oluşturuldu. Her ikisi de aynı referansa işaret ediyor gibi görünüyor.

Yanlış bir şey yapıyorum?
Aynı tür ilişkilerle çalışmak bir şey eksik mi?
Kesinlikle AppEngine aynı tür ilişkilere izin vermiyor mu? Daha önce benzer bir sorunla karşılaştık

+0

Sorunu gösteren bazı kaynak kodlarını eklemeniz gerekecek. JDO ya da başka bir çerçeve hakkında konuşuyorsanız burada net değil. –

+0

Evet, JDO kullanıyorum. – david

+0

Sadece manager.makePersistent (myClass); ve myClass'ın farklı özelliklere sahip iki farklı mySubClass'ı var. Ama myClass'ı manager.getObjectById (myClass.class, myClassKey) ile veri deposundan aldığımda; her iki alt sınıftaki özellikler eşittir. Yardımınız için teşekkürler! – david

cevap

1

, ben "kesin sorun ne çok emin değilim ve aynı olsun. Ama

Ancak doğru yönde en azından nokta sizi bu cevabı vardır umut . GAE ile java kullanırken "en iyi uygulamalar" bir çift Eğer

1) yani public class FaseGAE Serializable uygulayan sınıflar için Serializable uygulamak benimsemek - Bu saklanmasına kalıcı yetenekli sınıfları etkinleştirmek ve oturum nesnelerle alacaktır.

2) GAE veri deposu için nesnel kullanmayı deneyebilirsiniz http://code.google.com/p/objectify-appengine/