java - 使用 Google 应用引擎数据存储加载枚举集合

标签 java google-app-engine jdo

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

最佳答案

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

--安迪 ( DataNucleus )

关于java - 使用 Google 应用引擎数据存储加载枚举集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500643/

相关文章:

java - 套接字未连接

javascript - 动态行为添加是使用装饰器模式的唯一优势吗?

java - Java 中的 parallelStream 在哪些应用领域有用?

google-app-engine - 在 Google App Engine 上每次构建后运行 Laravel 数据库迁移

java - 如何从属性文件转换数据并设置为列表属性(使用 PropertyPlaceholderConfigurer)?

python - GAE Search API 现在支持部分搜索

c# - 以编程方式登录到 google app engine c#

google-app-engine - 如何在 Google App Engine (Java) 中注释嵌入式对象的集合?

java - 为什么 Collections 检索为空?

google-app-engine - Google App Engine - JDO 分离 FieldAccessException