2011-08-25 66 views
1

如何從Google App Engine上的查詢中只檢索一個實體?我創建一個查詢使用ORDER BY和使用:在Google App Engine上檢索TOP 1

List<Object> objs= (List<Object>) pm.newQuery(query).execute(); 
if (objs.size() > 0) { 
    obj= objs.get(0); 
} 

但是,當我在數據庫中有大量的「OBJ文件」,查詢是太貴了,我有太多的延遲。

還有另一種方法來做這個查詢?

+0

爲什麼不能無條件地調用.get(),並捕獲異常,或者如果對象不存在則檢查'null'?調用'size'計算整個結果集。 –

回答

3

看一看this document

這些查詢的有效用法:

// 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)); 
} 

return pq.asList(FetchOptions.Builder.withLimit(5).offset(5))); 

在你的情況我想你可以使用後者的語法。

它使用低級別的Java API而不是JDO,但它不應該讓您無法使用它。

+1

他也可以通過在查詢中設置一個範圍來使用JDO查詢,實現同樣的事情 – DataNucleus

+0

使用query.setRange(x,y)方法設置JDO查詢的範圍,這有點難以找到如果您查看限制/遊標,[此](http://code.google.com/appengine/docs/java/datastore/jdo/queries.html#Introducing_Queries)是鏈接。 – n0rm1e

-1

你試圖使用fetch方法..這可以給你一個類似的結果top 1

+0

但是,如何在Java GAE中使用提取?我看到了Python的這個API(在文檔中),但不是Java。 :( – Victor