GAE: сравнение строкового значения, возвращающего ложные результаты при выполнении запроса JDO - PullRequest
0 голосов
/ 10 февраля 2012

Для проекта 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());

Я схожу с ума здесь .. что происходит ??

1 Ответ

0 голосов
/ 12 февраля 2012

Проблема была связана с модификацией, которую я сделал в постоянной структуре / схеме Entity без правильного использования serialVersionUID.См. Комментарии к вопросу для более подробной информации, в частности, для Вируццо.

...