有一些类似的问题,但我无法找到具体的答案,我想做的事情是否可能。我正在使用App Engine,JDO。我正在尝试通过执行以下查询来检索对象“User”(也使用游标,以便永远不会再“看到”同一用户):
.
. *EDIT - added cursor-code*
extensionMap.put(JDOCursorHelper.CURSOR_EXTENSION, Cursor.fromWebSafeString(cursorAsString)); //cursorAsString is retrieved from user
Query query = pm.newQuery(User.class);
query.setExtensions(extensionMap); //Contains the cursor object
query.setRange(0, amount);
query.setOrdering("bornYear asc, toc asc");
query.setFilter("locationFid == :p1 && gender == :p2 && bornYear >= :p3 && bornYear <= :p4");
List<Object> params = new ArrayList<Object>();
params.add(locationFid);
params.add(lookingForGender);
params.add(yearSpanStart);
params.add(yearSpanEnd);
results = (List<User>) query.executeWithArray(params.toArray())
cursor = JDOCursorHelper.getCursor(results); //give this to user for use next request
在文档中我似乎无法找到任何说它不能使用游标和不等式过滤器只能它表现得很奇怪(嗯?)。但它似乎在我的情况下不起作用,我不确定我做错了什么。上面的代码是“有缺陷的”,因为它不会返回第一个请求后添加的“新”用户。但是,如果我将过滤和排序更改为:
query.setOrdering("toc asc");
query.setFilter("locationFid == :p1 && gender == :p2");
上述方法可行,但后来我不会达到我想要的年龄范围。有没有办法使第一个版本工作?或者我必须首先检索没有不等的用户,然后“手动”过滤然后服务器端,然后检索另一个“批”,如果我没有得到足够的结果?这似乎非常糟糕,主要是因为光标将移动通过这些用户,如果我改变年龄跨度,我将无法再次检索(/看到)它们。
谢谢!