Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检索Google应用程序引擎上的前1名_Java_Google App Engine_Jdo - Fatal编程技术网

Java 检索Google应用程序引擎上的前1名

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.

如何从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.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)));