GAE上带有游标的JDO查询返回相同的游标

时间:2015-12-09 10:52:56

标签: java spring google-app-engine jdo

我正在尝试在我的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;
}

当我发送一个null cursorString时,我得到前100个结果+新光标。 但是,当我使用新光标发送另一个请求时,我得到了正确的结果(#101-#200)但是相同的光标字符串。

数据存储区有很多实体(超过100000个),所以这可能不是由于结果的结束。

更新

我已经意识到这可能是由于Spring框架的问题。我们正在使用Spring 4.2.3 - 但我没有看到任何关于使用Spring和GAE的在线,更不用说Spring + GAE + Cursors ..

1 个答案:

答案 0 :(得分:0)

所以我在执行查询后添加了results.size()调用(我还删除了迭代结果的循环),这似乎解决了我的问题。希望这有助于其他人的发展!