我使用Objectify并拥有一个所有其他人都来自的基础实体。此基本实体具有非持久更新标志,当需要保存的对象属性值发生更改时,该标志由子类设置。我这样做是为了防止在与客户端同步数据时对数据存储区进行不必要的写入。
基本实体看起来像这样
@Cache
public abstract class WordBuzzEntity {
@Ignore
private boolean updated = false;
public boolean isUpdated() {
return updated;
}
public void setUpdated() {
updated = true;
}
public void save(boolean async) {
if (!updated)
return;
if (async)
ofy().save().entity(this);
else
ofy().save().entity(this).now();
}
}
我在使用
加载用户时注意到了User user = ofy().load().type(User.class).id(LoginTest.TEST_ID).now();
更新的标志有时在加载点设置为true。
这是因为Objectify会话缓存还是内存缓存?重新加载对象时,是否在此实例中缓存了被忽略的属性?
在保存点添加一行以将更新设置为false会解决我的问题,但我想了解发生了什么。
答案 0 :(得分:2)
Objectify会话缓存存储对象的实例,因此当从缓存加载项目时,忽略的字段实际上不会被忽略,因为它只是拉出最后一个实例而不是创建一个新实例。