在 GAE returns 相同游标上使用游标进行 JDO 查询
JDO Query with cursors on GAE returns same cursor
我正在尝试在我的 GAE 查询中实现分页,这就是我的结果:
public JSONArray getDeviceListByTypeWithCursor(String cursorString) {
PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
Query q = pm.newQuery(MobileDevice.class);
q.setRange(0, 100);
if(cursorString != "" && cursorString != null){
Cursor cursor;
try{
cursor = Cursor.fromWebSafeString(cursorString);
Map<String, Object> extensionMap = HashMap<String, Object>();
extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, cursor);
q.setExtensions(extensionMap);
}catch(Exception e){
cursor = null;
}
}
JSONArray array = new JSONArray();
List<MobileDevice> results = (List<MobileDevice>) q.execute();
for (MobileDevice device : results) {
array.put(device.toJSON());
}
Cursor cursor = JDOCursorHelper.getCursor(results);
cursorString = cursor.toWebSafeString();
array.put(cursorString);
return array;
}
当我发送空 cursorString 时,我得到了前 100 个结果 + 预期的新游标。
但是,当我使用新游标发送另一个请求时,我得到了正确的结果 (#101-#200),但游标字符串相同。
数据存储区有很多实体(超过 100000 个),所以这可能不是由于结果结束。
更新
我意识到这可能是由于 Spring 框架的问题。我们正在使用 Spring 4.2.3 - 但我没有在网上看到任何关于使用 Spring 和 GAE 的信息,更不用说 Spring+GAE+Cursors..
所以我在执行查询后添加了一个 results.size()
调用(我还删除了对结果进行迭代的循环),这似乎解决了我的问题。希望这对以后的其他人有所帮助!
我正在尝试在我的 GAE 查询中实现分页,这就是我的结果:
public JSONArray getDeviceListByTypeWithCursor(String cursorString) {
PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
Query q = pm.newQuery(MobileDevice.class);
q.setRange(0, 100);
if(cursorString != "" && cursorString != null){
Cursor cursor;
try{
cursor = Cursor.fromWebSafeString(cursorString);
Map<String, Object> extensionMap = HashMap<String, Object>();
extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, cursor);
q.setExtensions(extensionMap);
}catch(Exception e){
cursor = null;
}
}
JSONArray array = new JSONArray();
List<MobileDevice> results = (List<MobileDevice>) q.execute();
for (MobileDevice device : results) {
array.put(device.toJSON());
}
Cursor cursor = JDOCursorHelper.getCursor(results);
cursorString = cursor.toWebSafeString();
array.put(cursorString);
return array;
}
当我发送空 cursorString 时,我得到了前 100 个结果 + 预期的新游标。 但是,当我使用新游标发送另一个请求时,我得到了正确的结果 (#101-#200),但游标字符串相同。
数据存储区有很多实体(超过 100000 个),所以这可能不是由于结果结束。
更新
我意识到这可能是由于 Spring 框架的问题。我们正在使用 Spring 4.2.3 - 但我没有在网上看到任何关于使用 Spring 和 GAE 的信息,更不用说 Spring+GAE+Cursors..
所以我在执行查询后添加了一个 results.size()
调用(我还删除了对结果进行迭代的循环),这似乎解决了我的问题。希望这对以后的其他人有所帮助!