2011-06-11 66 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/