2014-02-12 2 views
0

У меня есть этот простой метод ednpoint:IllegalArgumentException: смещение не может быть выше 1000 в GAE

@ApiMethod(name = "createCategory") 
public RCategory createCategory(@Named("userHash")String userHash, @Nullable @Named("synchronously")Boolean synchronously, Category category) throws AccessForbiddenException, DuplicateEntityNameException, SubscriptionRequiredException { 
    User user = OwlEndpoint.getUser(userHash); 
    if (!user.hasSubscriptionActive()) throw new SubscriptionRequiredException(); 

    //Sprawdzam czy w profilu uzytkownika jest wiecej niz on sam (o ile w ogole ma profil) 
    List<Long> usersInProfileIds = getUsersInProfilesIds(user); 

    if (ofy().load().type(Category.class).filter("creatorId in", usersInProfileIds).filter("name", category.getName()).count() > 0) throw new DuplicateEntityNameException(); 
    category.setCreatorId(user.getId()); 

    if (synchronously != null && synchronously) ofy().save().entity(category).now(); 
    else ofy().save().entity(category); 

    return new RCategory(category, user.getId()); 
} 

Он прекрасно работает на сервере DEV, но после загрузки на GAE он начал обваливаться. Я нашел это в журналах, но это не имеет смысла для меня:

Request URL: https://myapp.appspot.com/_ah/api/owlendpoint/v1/createCategory/0A71A4A761C2B0C49BE3CE4ED19E78E93911DAE1E53732BE5635B29F923DBBFD5C54DEBE7F80831364D8255861D46878ADB657D0DDA95EEAF19956A6C5967CADF903543D1DA577677FEAEC70F0019B055C4CBA168A4A188D41393A9BF08834A92F8BB13D5E03F7F901C1281878BE8B79 
    Method: myappendpoint.createCategory 
    Error Code: 400 
    Reason: badRequest  
    Message: java.lang.IllegalArgumentException: offset may not be above 1000 
+0

Вам нужно использовать курсор. Смещение имеет те же ограничения, что и выборка. Он просто не возвращает все элементы до смещения. –

+0

Курсор? но где? Какая линия вызывает проблемы? –

ответ

0

Я сделал этот метод:

@SuppressWarnings("rawtypes") 
public static boolean hasItems(Query query) { 
    Iterator it = query.iterator(); 
    return it.hasNext(); 
} 

Я использую его, чтобы определить, если есть по крайней мере один элемент в запросе без использования count(). Еще хотелось бы знать, как я могу использовать count() и как не могу ...

Смежные вопросы