java - GAE、JDO、Jcache : can't put a list of entities to the cache

标签 java google-app-engine jcache

我有一个返回实体列表的查询。当我尝试将此列表放入缓存时,我得到了熟悉的 java.lang.IllegalArgumentException

但是...我可以毫无问题地将列表中的每个项目放入缓存。即使当我创建一个新的 LinkedList 时,使用 for 循环将实体从获取的列表复制到这个新列表并尝试将其放入缓存,它也能工作。

List<MyEntity> a = (List<MyEntity>) q.execute(getKey());

List<MyEntity> b = new LinkedList<MyEntity>();
for (MyEntity e : a)
        b.add(e);

cache.put(key, b); // this works
cache.put(key, a); // this doesn't

那么我缺少什么?缓存其他查询有效,我不知道为什么这个不同。

最佳答案

很可能 JDO 查询返回的 List 不可序列化,因为它是动态代理。

要制作副本,您只需使用

List<MyEntity> b = new ArrayList<MyEntity>(a);

注意:这会根据 b 的元素创建一个新列表 a,但不会复制元素,因此它非常轻量级。

关于java - GAE、JDO、Jcache : can't put a list of entities to the cache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007466/

相关文章:

java - Apache Ignite 缓存与 Postgresql

java - 简单的 Java 多线程测试不起作用

java - 在 Android 中将 Json 转换为 Xml

java - 在 Groovy 中解析 JSON 数组

java - 为什么 [appengine-api-1.0-sdk] 范围不是 "provided"?

java - 为什么@Cacheable内部的条件没有任何影响?

java - 优化 n 体引力吸引算法

java - 双向链表空指针异常

python - 将谷歌应用引擎实体下载为 CSV

java - Ehcache作为Spring中配置的JCache实现