加载实体工作,我通过钥匙或ID用于加载和存储实体简单的一层,我只是加入缓存到这一层。当具有给定密钥的实体在缓存中时,返回它而不是从数据存储中获取。当实体更新并保存到数据存储区时,层简单地将缓存中的实体设置为null。它是完全透明的。GAE,JDO:从缓存
这似乎是工作正常,但是从缓存中获取的对象是从对象从数据库中获取略有不同。例如,有些东西停止工作,我不能在集合实体内使用.contains()来检查两个实体之间是否存在关系。我也遇到了一个奇怪的行为,当我从缓存中加载对象并立即在存储到数据存储之后,代表关系的集合中的所有项目都被替换为null
s。但我无法复制它。现在它工作正常。
我不知道什么是引擎盖下发生的,所以问题是,与高速缓存可靠这种工作方式?我能像使用从数据存储中获取的实体一样处理从缓存中获取的实体(访问子代,更新,删除...)吗?
感谢解释如何'Collection.contains(对象)'的作品,我知道对象得到初始化/反序列化,但我不知道这会导致此问题。还有其他事情要注意吗?为了重复我原来的问题,除了这个(自然也就是实体可能已经过期),我可以像使用数据存储区一样使用缓存实体吗? – tobik 2012-08-17 16:56:22
本例中的实体是POJO,对吧?那么是的,如果你确保他们正确序列化,你可以像使用数据存储一样使用它们。但要小心比较它们的解释。 – 2012-08-17 19:22:23
是的,他们是。使用@PersistenceCapable注释提升简单类。所以这是个好消息,谢谢。正如你所建议的那样,我重写了equals()和hashCode()方法,所以现在我可以按照我想要的方式比较它们。 – tobik 2012-08-18 08:07:22