#google-app-engine #objectify
#google-app-engine #objectify
Вопрос:
Один из моих объектов имеет следующее объявление для своего идентификатора:
@Id
private String oInstID;
public String getInstID(){return oInstID;}
public void initID(){
oInstID = OfyController.makeID(Partner.class, null);
}
Имейте в виду, что у меня такое же объявление и для других моих объектов.
У меня есть следующие инструкции для тестирования после ofy.save():
Sticky persisted = OfyController.ofy().load().type(Sticky.class).first().now();
String id = persisted.getInstID();
Sticky queried = OfyController.ofy().load().type(Sticky.class).id(id).now();
Sticky queried2 = OfyController.ofy().load().entity(persisted).now();
Сохраненный объект вернул объект
Идентификатор вернул идентификатор объекта
Запрошенный результат вернул значение null…в этом и заключается моя проблема.
Запрошенный 2 вернул тот же объект, что и сохраненный
Есть идеи, почему запрос вернул null?
Спасибо!
Комментарии:
1. Точно ли вы представляете определение сущности ? Если у вас есть
@Parent
поле, это приведет к такому поведению. В этом коде нет ничего явно неправильного, поэтому опубликуйте полный пример, показывающий вашу операцию сохранения.
Ответ №1:
Мой предыдущий опыт работы с Objectify крошечный и очень устаревший, но то, что вы описываете, соответствует возможной согласованности. Есть немного полезной информации о хранении данных с помощью Objectify и Datastore.
Комментарии:
1. @Dave… что мой сценарий должен делать с возможной согласованностью? Просто к вашему сведению … приведенные выше инструкции по тестированию были написаны в JUnit, поэтому EC здесь не должен быть фактором. Спасибо!
2. EC является фактором, если вы используете JUnit для dev_appserver. Dev_appserver имитирует для вас возможную согласованность. Это третье утверждение эквивалентно
SELECT * FROM Sticky WHERE id=?
тому, которое полностью подчиняется EC.3. Это неверно — load().type(t).id(i) — это то же самое, что создать ключ для {t,i} и выполнить получение по ключу. Это будет строго согласовано. Какова бы ни была проблема, это что-то другое.