3

我正在使用带有 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 插件创建了我的项目,并且没有对数据存储设置进行任何更改。那么为什么我的枚举列表为空呢?

4

2 回答 2

5

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

——安迪(数据

于 2009-10-08T10:14:10.847 回答
1

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

于 2009-10-01T19:29:03.473 回答