Java Google App Engine Datastore: оператор «IN» доступен в фильтрах запросов JDO, как в Python? - PullRequest
0 голосов
/ 19 сентября 2009

На этой странице описан оператор 'IN', который можно использовать в хранилище данных GAE для сравнения поля со списком возможных совпадений, а не только с одним значением:

Однако это для Python. В Java (App Engine 1.2.5), пытаясь

query.setFilter("someField IN param");

в моем javax.jdo.query запускается JDOUserException 'Часть выражения не может быть проанализирована: IN param'.

Есть ли способ, которым это можно сделать?

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Чтобы использовать оператор IN, я использую это:

List<Site> query(List<String> searchTerms)
{
    javax.jdo.Query q = pm.newQuery(Site.class);
    q.setFilter("param.contains(siteField)");
    q.declareParameters("java.util.Collection param");
    return (List<Site>)q.execute(searchTerms);
}
1 голос
/ 19 сентября 2009

Python-версия IN фактически реализована в коде уровня приложения (который вы можете проверить, поскольку он является частью SDK App Engine с открытым исходным кодом): по сути, запрос с IN, подобным вашему, становится N запросами. с == (где N == len (param)), и результаты этих N запросов объединяются в общий результат.

Хотя, возможно, удобно использовать эту функциональность как часть исходного кода, предоставляемого Google, кроме этого удобства нет никакой дополнительной выгоды, и, в частности, нет никакого преимущества в производительности, если вы просто делаете это в своем собственном коде. Поэтому я не удивлен, что этот незначительный трюк (по крайней мере, пока) не был добавлен в версию Java ...

...