2011-06-11 6 views
10

necesito tener dos objetos del mismo tipo. Por defecto appengine no lo permite, pero encontré este parámetro: datanucleus.appengine.allowMultipleRelationsOfSameType, así que puedo guardar los dos mismos objetos de tipo.AppEngine - Múltiples Relaciones de Igualdad Tipo

En el modo de depuración, antes de llamar al método makePersistent verifiqué un valor dentro de cada objeto y eran diferentes, sin embargo, cuando intenté recuperar los valores del almacén de datos, eran lo mismo. Ambos tenían el valor del segundo objeto?

Este código es para guardar el objeto 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(); 

Este código es conseguir el objeto:

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

FaseGAE objeto:

@PersistenceCapable 
public class FaseGAE { 

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

    @Persistent private List<GrupoGAE> grupos; 

GrupoGAE objeto:

@PersistenceCapable 
public class GrupoGAE { 

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

    @Persistent private List<MyClass1> list; 

MyClass1 objeto:

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

miclase2 objeto:

@PersistenceCapable 
public class MyClass2{ 

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

testValue1 y testValue2 mantiene valores diferentes, pero sameTypeObject1 y sameTypeObject2 tener el valor de sameTypeObject2. Revisé el almacén de datos y ambos objetos fueron creados con diferentes valores. Parece que ambos apuntan a la misma referencia.

¿Estoy haciendo algo mal?
¿Algo le falta para trabajar con las mismas relaciones tipo?
Definitivamente AppEngine no permite las mismas relaciones de tipo?

+0

Necesitará incluir algún código fuente que demuestre el problema. No está claro aquí si estás hablando de JDO u otro marco. –

+0

Sí, estoy usando JDO. – david

+0

Acabo de llamar al manager.makePersistent (myClass); y myClass tiene dos mySubClass diferentes con diferentes atributos. Pero cuando obtengo myClass del almacén de datos con manager.getObjectById (myClass.class, myClassKey); los atributos en ambas subClasses son iguales. Gracias por tu ayuda! – david

Respuesta

1

que he encontrado un problema similar antes, I "m no muy seguro de cuál es tu problema exacto y si se trata de la misma. Pero espero que esta respuesta será al menos de apuntar en la dirección correcta

Sin embargo, hay un par de "mejores prácticas" que puede adoptar cuando se utiliza java con GAE

1) implementar Serializable para las clases es decir public class FaseGAE implementa Serializable -. esto permitirá clases capaces persistentes para almacenar y recuperar con objetos de sesión.

2) podría intentar usar objectify para el almacén de datos GAE http://code.google.com/p/objectify-appengine/

Cuestiones relacionadas