使用GAE,我使用javax的实体管理器(javax.persistence.EntityManagerFactory)来生成实体管理器的实例:
private static final EntityManagerFactory emfInstance = Persistence.createEntityManagerFactory("transactions-optional");
我使用以下代码从数据存储中检索:
event = mgr.find(Event.class, id);
我遇到的问题是,如果我第一次检索数据,一切都会好起来的。但是,如果我通过GAE仪表板中的“数据存储查看器”手动编辑值。下次使用“find”方法调用数据时,返回的值是旧值。我必须再次手动上传后端才能获得新值。
知道造成这种情况的原因是什么?我希望mgr.find始终调用最新值。感谢。
答案 0 :(得分:0)
正在缓存实体。当您通过数据存储区查看器进行更改时,后端缓存的实体不会受到影响。
在数据存储区查看器中进行更改后,单击“Flush Memcache”按钮。
如果这没有帮助,您可能需要更改缓存的配置:
默认情况下启用Level2缓存。获取先前的默认值 行为,设置持久性属性datanucleus.cache.level2.type 没有。 (或者包括在中的datanucleus-cache插件 classpath,并设置持久性属性 datanucleus.cache.level2.type到javax.cache使用Memcache for L2 缓存。
答案 1 :(得分:0)
尝试刷新内存缓存,然后再次尝试查询。大多数情况下,最后一个持久化的实体数据是在您执行此操作之前检索的内容。