2011-08-11 18 views
9

tengo este método en mi servicio RPC:paginación Objectify con cursores

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

Como se puede ver, no estoy utilizando los dos parámetros, que, en un mundo de SQL, me gustaría utilizar como LIMIT y OFFSET .

no es del todo claro lo que tengo que hacer ahora, empecé a leer esto: http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors

creo que tengo que hacer un query.startCursor()

A continuación, recorra para "to" tiempos, el tamaño de la página.

¿De acuerdo? ¿Me pueden ayudar con algunos fragmentos? :)

Respuesta

15

a partir de documentos: cursores le permiten tomar un "punto de control" en un conjunto de resultados de consulta, almacenar el puesto de control en otro lugar, y luego reanudar desde donde lo dejó finales

como usted necesita simplemente limitar/desplazamiento , debe usar el método limit() y offset() de Objectify Query. Al igual que:

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

O, cuando se tiene cursor:

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

no es eficiente, lo siento, ya sé que estoy tratando http://stackoverflow.com/questions/6861897/objectify-paging para construir una aplicación que pueda manejar miles de millones de registros no pocos: - \ –

+0

Si conoce los cursores, ¿hay alguna forma de tener un comportamiento de desplazamiento límite con ellos? –

+0

Puede simplemente comenzar desde el cursor (el cursor es solo una posición serializada), si _ya tiene_ uno. ¿Cómo planeas usar este método? –