【问题标题】:Loading a collection of Enums with Google app engine datastore使用 Google 应用引擎数据存储加载枚举集合
【发布时间】:2009-09-30 21:01:34
【问题描述】:

我正在使用带有 Java 的 Goole 应用程序引擎数据存储,并尝试加载带有枚举列表的对象。每次我加载对象时,列表都是空的。对象是

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ObjectToSave {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private List<AnEnum> anEnumList;

    //public getters and setters
}

枚举很简单

public enum AnEnum {
    VALUE_1,
    VALUE_2;
}

保存的代码是

ObjectToSave objectToSave = new ObjectToSave();
List<AnEnum> anEnumList = new ArrayList<AnEnum>();
anEnumList.add(AnEnum.VALUE_1);
objectToSave.setAnEnumList(anEnumList);
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
    pm.makePersistent(objectToSave);
} finally {
    pm.close();
}

加载它的代码是

PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
    Key key = KeyFactory.createKey(ObjectToSave.class.getSimpleName(), id);
    ObjectToSave objectToSave = pm.getObjectById(ObjectToSave.class, key);
} finally {
    pm.close();
}

我可以使用http://localhost:8080/_ah/admin 查看数据存储区中的数据,并且可以看到我的列表已保存,但加载对象时它不存在。

据我所知,我使用 Eclipse 插件创建了我的项目,并且没有对数据存储设置进行任何更改。那么为什么我的枚举列表为空呢?

【问题讨论】:

  • 您能显示将列表分配给 anEnumList 的代码吗?
  • 对象中的其他字段是否保存正确?
  • 我已更新问题以显示枚举列表的创建。我还没有在此处添加的其他值也正在保存并正在设置主键。
  • 我稍微改变了我的问题,因为我现在可以看到数据已保存但未加载

标签: java google-app-engine jdo


【解决方案1】:

是的,但您的列表字段在加载时不在默认提取组中,因此未加载。 阅读JDO Fetch Groups。您可以将其添加到 DFG,或启用自定义提取组,或者在关闭 PM 之前“触摸”该字段。

--安迪 (DataNucleus)

【讨论】:

    【解决方案2】:

    您如何创建 ObjectToSave 的实例?所有实例变量引用类型的默认值为 null,因此除非您有(额外的)代码来创建 List&lt;AnEnum&gt; 的实例并将其分配给 anEnumList,否则应为 null。

    【讨论】:

    • 我正在使用调试器为列表设置一个值,我可以在保存对象之前看到它的设置。我已经更新了问题,试图让这个问题更清楚。
    • 也许您需要将您的枚举声明标记为@PersistenceCapable?
    • “子对象的集合(@PersistenceCapable 类)创建具有一对多关系的多个实体。请参阅关系。”来自:code.google.com/appengine/docs/java/datastore/…
    • 子对象“AnEnum”不是 PersistenceCapable,也不应该是。枚举是 JDO 支持的持久类型
    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2013-12-03
    • 1970-01-01
    • 2014-03-10
    • 2014-10-21
    • 2012-11-17
    相关资源
    最近更新 更多