Java 检索Google应用程序引擎上的前1名
如何从Google App Engine上的查询中仅检索一个实体。我正在使用以下命令创建对的查询:Java 检索Google应用程序引擎上的前1名,java,google-app-engine,jdo,Java,Google App Engine,Jdo,如何从Google App Engine上的查询中仅检索一个实体。我正在使用以下命令创建对的查询: List<Object> objs= (List<Object>) pm.newQuery(query).execute(); if (objs.size() > 0) { obj= objs.get(0); } List objs=(List)pm.newQuery(query.execute(); 如果(objs.size()>0){ obj=objs.
List<Object> objs= (List<Object>) pm.newQuery(query).execute();
if (objs.size() > 0) {
obj= objs.get(0);
}
List objs=(List)pm.newQuery(query.execute();
如果(objs.size()>0){
obj=objs.get(0);
}
但是,当我的数据库中有大量的“obj”时,查询的代价太高,而且我有太多的延迟
还有其他方法可以执行此查询吗?您是否尝试过使用
fetch
方法。。这会给你一个类似的结果,你可以看一下
以下是查询的有效用法:
// Construct then prepare your query
List<Entity> get5TallestPeople() {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query q = new Query("Person");
q.addSort("height", SortDirection.DESCENDING);
PreparedQuery pq = ds.prepare(q);
return pq.asList(FetchOptions.Builder.withLimit(5));
}
在您的情况下,我想您可以使用后一种语法
它使用低级Java API而不是JDO,但它不应该妨碍您使用它。但我如何在Java GAE中使用fetch?我看到这个API(在文档中)是针对Python的,但不是针对Java的(为什么不无条件地调用.get(),如果对象不存在,则捕获异常或检查
null
?调用size
计算整个结果集。他也可以通过在查询上设置一个范围来使用JDO查询,实现同样的效果。使用query.setRange(x,y)设置JDO查询的范围方法。如果查找limit/cursor,这有点难找到。是链接。
return pq.asList(FetchOptions.Builder.withLimit(5).offset(5)));