Запрос хранилища данных с оператором 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(...),

Другие вопросы по тегам