2014-10-22 2 views
1

Поэтому я сохраняю объект «Пользователь» в хранилище данных, который отображается в средстве просмотра хранилища данных, и я могу видеть все свойства, которые я ожидаю, который включает в себя свойство с именем contacts, которое содержит список типов long (представляющие идентификаторы людей в списке контактов этого пользователя). Это сохраняется с использованием userEntity.setProperty("contacts", ids);, где ids является List<Long>.Свойства объекта хранилища данных не возвращаются

Однако, когда я использую Java в App Engine для извлечения этой сущности (без каких-либо проекций, просто фильтр на адрес электронной почты пользователя, которого я ищу) Я получаю объект объекта, у которого нет контактов имущество.

Есть ли причина, по которой я не получал бы полный набор свойств? Код я использую (надеюсь) относительно стандарт:

Query.Filter emailFilter = new Query.FilterPredicate("email", Query.FilterOperator.EQUAL, email); 
Query q = new Query("User").setFilter(emailFilter); 
Entity userEntity = datastoreService.prepare(q).asSingleEntity(); 
logger.info(userEntity.toString()); 

Это выходы:

<Entity [User(5156288090603520)]: 
lastName = Doe 
updatedTs = 1414005061759 
email = [email protected] 
firstName = John 
ownerEmail = [email protected] 
> 

Что все, что я вижу в окне просмотра, кроме contacts имущества, содержащего список. Как таковой, если я попробую userEntity.getProperty("contacts");, тогда я получаю нулевой объект. Если я выполнить запрос GQL в App Engine консоли:

SELECT contacts FROM User

Я также получить ожидаемый результат. Любая идея, почему мой запрос Java не возвращает это свойство?

+1

Вы недавно обновили объект и добавили поле контактов? Возможно, что вы получаете возможную согласованность - возможно, что ваши индексы обновлены, но они все еще возвращают старый объект. –

+0

Я действительно задавался вопросом, может ли это быть так, но другие свойства, которые были изменены в одной транзакции, как представляется, обновились. Возможно ли, что они обновляются независимо? – aiszatt

+0

Спасибо @ patrick-costello, ты был прав. Я думал, что конечная последовательность означает несколько секунд/минут, а не часов! – aiszatt

ответ

0

Что касается того, что @Patrick Costello публикует в комментариях, я бы добавил, что да, конечная консистенция является причиной этого, но вы также можете попытаться смягчить эти побочные эффекты возможной согласованности, добавив сущности к сущности групп, использующих предков. От this link:

Для получения сильно согласующиеся результатов запроса, необходимо использовать запрос предка, ограничивающий результаты в одной группы сущностей. Это работает, потому что группы объектов являются единицей согласованности, а также транзакцией .

Смежные вопросы