Хранилище данных Java Google App Engine:Оператор 'IN' доступен в фильтрах запросов JDO, как в Python?

StackOverflow https://stackoverflow.com/questions/1448677

  •  11-09-2019
  •  | 
  •  

Вопрос

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

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

query.setFilter("someField IN param");

в моем javax.jdo.query запускается исключение JDOUserException 'не удалось проанализировать часть выражения:В параметре".

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

Это было полезно?

Решение

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

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

Другие советы

Чтобы использовать оператор 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top