2011-08-11 56 views
9

我有我的RPC服務這樣的方法:物化尋呼與光標

@Override 
    public Entrata[] getEntrate(int from, int to) { 
     List<Entrata> data = entrateDao.list(); 
     return data.toArray(new Entrata[0]); 
    } 

正如你所看到的,我沒有使用這兩個參數,其中,在SQL的世界裏,我會爲限制使用和OFFSET 。

它並不完全清楚我現在要做的,我開始閱讀: http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors

我認爲我必須做一個query.startCursor()

然後遍歷爲「TO」時代,頁面大小。

好嗎?你能幫我一些片段嗎? :)

回答

15

從文檔:光標讓你參加一個查詢結果集的「檢查點」,在別處存儲檢查點,然後從你離開了後期

當你只需要限制/偏移,其中恢復,您必須使用limit()offset() Objectify Query的方法。像:

ob.query(Entrata.class).limit(to - from).offset(from) 

或者,當你有光標:

String cursor = // get it from request 
Query<Entrata> query = ob.query(Entrata.class); 
Query q = query.startCursor(Cursor.fromWebSafeString(cursor)); 
q.limit(x); 
QueryResultIterator<Entrate> iterator = query.iterator() 
List<Entrate> data = // fetch data 
String newCursor = iterrator.getStartCursor().toWebSafeString() 
return new EntrataListWithCursor(data, cursor); 
+0

效率不高,很抱歉,我已經知道http://stackoverflow.com/questions/6861897/objectify-paging我想建立一個應用程序可以處理不少的記錄: - \ –

+0

如果你知道遊標,是否有辦法對它們進行限制偏移行爲? –

+0

你可以從光標開始(光標只是一個序列化位置),如果_already_有一個。你打算如何使用這種方法? –