微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AppEngine-相同类型的多重关系

如何解决AppEngine-相同类型的多重关系

| 我需要具有相同类型的两个对象。认情况下,appengine不允许这样做,但是我找到了以下参数:datanucleus.appengine.allowMultipleRelationsOfSameType,因此可以保存两个相同类型的对象。 在调试模式下,在调用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不允许相同的类型关系吗?     

解决方法

        我之前也遇到过类似的问题,但我不太确定您的确切问题是什么,是否相同。但是希望这个答案至少可以为您指明正确的方向 但是,将Java与GAE结合使用时,可以采用几种“最佳实践”。 1)实现类的可序列化 即公共类FaseGAE实现了Serializable -这将使具有持久能力的类能够与会话对象一起存储和检索。 2)您可以尝试将objectify用于GAE数据存储 http://code.google.com/p/objectify-appengine/     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。