2011-08-11 61 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_有一个。你打算如何使用这种方法? –