2010-06-10 11 views
7

Ich muss einfache Paginierung von Objekten erstellen, aber wenn ich manuell lese, fand ich heraus, dass query.setRange (5, 10); holt 10 Objekte, selbst wenn nur 5 Objekte benötigt werden.Seitenumbruch in Google App Engine mit Java

Gibt es sowieso nur benötigte Objekte zu holen?

EDIT: Ich begann prämie, so fi nden Sie mich einfaches Beispiel-Code in Java zeigen können, das funktioniert, dann akzeptieren ich dir antworten.

Antwort

0

Sie wollen wahrscheinlich schauen mit cursors anstatt setRange, wenn Sie Paginierung zu tun versuchen.

1

Warum ist es ein Problem, wenn 10 Objekte aus der Datenbank zurückgegeben werden? Sie werden nur die 5 Objekte zurückgegeben, die Ihnen wichtig sind (die ersten 5 werden verworfen).

Ich frage nicht, weil ich denke, dass die Methode setRange eine Lösung ist, die unglaublich gut skaliert, aber es ist eine einfache und vernünftige Lösung, die in einer großen Anzahl von Fällen mehr als ausreichend ist.

Planen Sie extrem große Tabellen oder teure Joins? Wenn nicht, wäre ich versucht, setRange als Ausgangspunkt für Ihre Paginierung zu verwenden.

2

Wie wäre es damit:

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... 

Von:

How to use datastore cursors with jpa on GAE

auch:

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

oder ohne JPA sehen:

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