2010-06-10 8 views
7

Je dois créer une pagination simple d'objets, mais lorsque j'ai lu le manuel, j'ai découvert que query.setRange (5, 10); va chercher 10 objets, même si seulement 5 objets sont nécessaires.Pagination dans Google App Engine avec Java

Est-il possible d'aller chercher les objets nécessaires?

EDIT: J'ai commencé bounty, si fi vous pouvez me montrer un exemple de code simple en Java qui fonctionne, alors je vais accepter votre réponse.

Répondre

0

Vous souhaiterez probablement utiliser cursors plutôt que setRange si vous tentez d'effectuer une pagination.

1

Pourquoi est-ce un problème si 10 objets sont renvoyés à partir de la base de données? Vous recevrez toujours les 5 objets qui vous intéressent (les 5 premiers sont défaussés).

Je ne pose pas de questions parce que je pense que la méthode setRange est une solution qui s'adapte incroyablement bien, mais c'est une solution simple et raisonnable qui est plus que suffisante dans un bon nombre de cas.

Avez-vous l'intention d'utiliser des tables extrêmement volumineuses ou d'intégrer des jointures coûteuses? Sinon, je serais tenté d'utiliser setRange comme point de départ pour votre pagination.

2

Que diriez-vous ceci:

List<Employee> results = (List<Employee>) query.execute(); 
// Use the first 20 results... 

Cursor cursor = JPACursorHelper.getCursor(results); 
String cursorString = cursor.toWebSafeString(); 
// Store the cursorString... 

// ... 

// Query query = the same query that produced the cursor 
// String cursorString = the string from storage 
Cursor cursor = Cursor.fromWebSafeString(cursorString); 
query.setHint(JPACursorHelper.CURSOR_HINT, cursor); 
query.setRange(0, 20); 

List<Employee> results = (List<Employee>) query.execute(); 
// Use the next 20 results... 

De:

How to use datastore cursors with jpa on GAE

aussi:

http://groups.google.com/group/google-appengine-java/browse_thread/thread/5223215ff24c3b3e/d22297d1d76a9c8b

ou sans JPA voir:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Cursor.html