我有一个简单的问题
在 objectify 文档中它说“只有 get()、put() 和 delete() 与缓存交互。query() 不被缓存” http://code.google.com/p/objectify-appengine/wiki /IntroductionToObjectify#Global_Cache。
我想知道 - 如果你有一个根实体(我没有使用@Parent,因为它似乎有所有可伸缩性问题)所有其他实体都有一个密钥,你做一个查询,比如
ofy.query(ChildEntity.class).filter("rootEntity", rootEntity).list()
这是完全绕过缓存吗?
如果是这种情况,是否有一种有效的缓存方式来对条件进行查询 - 或者就此而言,您是否可以使用父项缓存查询,您必须在其中进行实际的祖先查询,如下所示
Key<Parent> rootKey = ObjectifyService.factory().getKey(root)
ofy.query(ChildEntity.class).ancestor(rootKey)
谢谢
至于下面的评论之一,我添加了一个编辑
示例 dao(忽略 validate 方法 - 它只是进行一些空值和数量检查):
这是从请求工厂 ServiceLocator 正在使用的 DAO 调用的委托中查找所有方法的示例
public List<EquipmentCheckin> findAll(Subject subject, Objectify ofy, Event event) {
final Business business = (Business) subject.getSession().getAttribute(BUSINESS_ATTRIBUTE);
final List<EquipmentCheckin> checkins = ofy.query(EquipmentCheckin.class).filter(BUSINESS_ATTRIBUTE, business)
.filter(EVENT_CONDITION, event).list();
return validate(ofy, checkins);
}
现在,当执行此操作时,我发现实际上在我的 AbstractDAO 中调用了以下方法。
/**
*
* @param id
* @return
*/
public T find(Long id) {
System.out.println("finding " + clazz.getSimpleName() + " id = " + id);
return ObjectifyService.begin().find(clazz, id);
}