我需要有两个相同类型的对象。默认情况下,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不允许相同的类型关系?
你将需要包含一些源代码来演示这个问题。如果你在谈论JDO或其他框架,这里就不清楚了。 – 2011-06-12 03:11:29
是的,我正在使用JDO。 – david 2011-06-14 01:44:01
我只是打电话给manager.makePersistent(myClass);而myClass有两个不同的mySubClass,它们具有不同的属性。但是,当我从manager.getObjectById(myClass.class,myClassKey)从数据存储中获取myClass;两个子类中的属性都是相等的。 Thx为您提供帮助! – david 2011-06-14 01:51:27