Для проекта iOS я использую GAE (стек Java) для хранения токена устройства пользователя и использую его для отправки Push-уведомлений.
У меня есть объект Device, который содержит несколько полей, включая appVersionполе типа String.База данных содержит некоторые устройства с версией 1 и некоторые с версией 2.
Когда я запускаю запрос JDO, чтобы найти все устройства с "appVersion", равным 2, он возвращает ожидаемый результат, но когда я делаю то же самое сВ версии 1 запрос не дал результата, хотя есть сущности, соответствующие этому условию.
Это код:
javax.jdo.Query query = _pm.newQuery(Device.class, "appVersion == appVersionParams");
query.declareParameters(String.class.getName()+" appVersionParams");
List<Device> results = (List<Device>) query.execute(message.getAppVersion());
Я несколько раз проверял, что сущности устройства с версией 1 хранятсяправильно (тип String и содержит правильное усеченное значение, которое действительно точно соответствует параметру, который я передаю).
Впервые я столкнулся с этой проблемой в среде Dev, поэтому я удалил локальную БД и создалпротестируйте сущности и снова запустите Query - на этот раз он вернул ожидаемые результаты для версий 1 и 2. Но после перезапуска сервера он снова вернул ложные результаты для версии 1 (хотя это хорошо с версией 2).Надеюсь, что это просто ошибка в локальной среде разработчиков.Я развернул его в производственной среде, и он вернул только 4 сущности (несколько тысяч соответствуют этому условию) - все сущности хранились одинаково / API.
Я также пытался перейти с JDO на низкуюAPI уровня для получения сущностей, но у меня такое же странное поведение.Вот код для этого:
Query q = new Query("Device");
q.addFilter("appVersion", FilterOperator.EQUAL, message.getAppVersion());
Я схожу с ума здесь .. что происходит ??