Запрос хранилища данных с оператором IN
Кажется, что новый интерфейс хранилища гибкой среды не поддерживает IN
операция при выполнении запроса. Я надеюсь, что я не прав, и если да, то как можно использовать IN
оператор в новом интерфейсе Java Datastore?
3 ответа
Запрос типа - WHERE color IN('RED', 'BLACK')
, он не поддерживается хранилищем данных (на стороне сервера). То же самое в случае с OR
оператор (например, WHERE color='RED' OR color='BLACK'
). Некоторые клиентские API добавили эту функцию, разделив запрос на несколько, а затем объединив результаты каждого запроса. Новый google-cloud-java API пока не поддерживает это. На данный момент вам нужно будет выполнить несколько запросов для каждого значения в IN
пункт и объединить результаты.
Я попытался использовать методы запроса репозитория, но получил сообщение об ошибке, сообщающее, что он не поддерживается.
Только решил для меня, используя@Query
аннотация;
Пример:
@Query("select * from UserGroup where name IN @names")
List<Company> findAllByName(List<String> names);
Вот пример из документации:
Если вы хотите установить более одного фильтра в запросе, вы должны использовать
CompositeFilter
, для чего требуется как минимум два фильтра.
Filter tooShortFilter = new FilterPredicate("height", FilterOperator.LESS_THAN, minHeight);
Filter tooTallFilter = new FilterPredicate("height", FilterOperator.GREATER_THAN, maxHeight);
Filter heightOutOfRangeFilter = CompositeFilterOperator.or(tooShortFilter, tooTallFilter);
Query q = new Query("Person").setFilter(heightOutOfRangeFilter);
Вы также можете использовать .and()
, Код здесь для Java 7. Для Java 8 вы можете найти соответствующий код в документации, упомянутой выше. Надеюсь, это поможет.
Сейчас IN
, Хотя я недавно не пробовал сам, в текущей документации говорится, что он все еще может использоваться как оператор. В соответствии с этим, что-то вроде кода ниже должно работать:
Filter propertyFilter = new FilterPredicate("height", FilterOperator.IN, minHeights);
Query q = new Query("Person").setFilter(propertyFilter);
Кроме того, вы можете использовать Google GQL. Это позволит вам написать SQL-подобный синтаксис, в котором вы можете использовать in(...)
,