Spring Boot + хранилище данных gcp + эмулятор хранилища данных получает INVALID_ARGUMENT, обнаруженный или / IN

У меня есть приложение, работающее в стандартной среде App Engine, использующее Google Cloud Tools и платформу Datanucleus для доступа к данным.

Когда я запускаю это приложение в локальной среде, оно работает нормально, и когда я делаю Select с помощью OR или IN в предложении Where, оно без проблем возвращает регистры таблиц.

Теперь я хочу улучшить свое приложение и создать новое, используя Spring Boot, Spring Cloud GCP и локальный эмулятор Cloud Datastore Emulator. Когда я пытаюсь выполнить запрос через эмулятор хранилища данных, он работает нормально, но, когда в запросе есть IN или OR, эмулятор регистрирует ошибку.

Запрос:

@Query(value = "SELECT * FROM  Evento WHERE fincaId = @id_finca AND tipoEvento = 3 OR tipoEvento = 4")

И текст ошибки:

[datastore] INFORMACI?N: Exception when handling request: INVALID_ARGUMENT: Encountered "OR" at line 1, column 68.
[datastore] Was expecting one of:
[datastore]     <EOF>
[datastore]     "and" ...
[datastore]     "group" ...
[datastore]     "limit" ...
[datastore]     "offset" ...
[datastore]     "order" ...

Может ли эмулятор хранилища данных делать запросы с предложением OR или IN?

Есть ли способ сделать это по-другому?


person Jorge Merino Llamera    schedule 21.12.2020    source источник


Ответы (1)


Хранилище данных не поддерживает операторы IN и OR. Если вы хотите иметь такую ​​функциональность, вы должны отправить два запроса и объединить их на стороне клиента. полный список поддерживаемых типов и примеры запросов см. в этой документации

person Methkal Khalawi    schedule 23.12.2020
comment
Извините, но в моем старом приложении я использую такие фильтры для хранилища данных Google. У вас есть библиотека com.google.appengine, в которой есть com.google.appengine.api.datastore.Query.CompositeFilterOperator.or и com.google.appengine.api.datastore.Query.FilterOperator.IN для доступа непосредственно из вашего приложения. с использованием этого типа фильтров. Проблема в том, что я меняю инфраструктуру, и кажется, что новая технически хуже, чем старая или несколько ограниченных. - person Jorge Merino Llamera; 23.12.2020