AppEngine + Objectify — Могу ли я превратить Key‹Object› обратно в Object?

Я делаю простую асинхронную операцию размещения с помощью Objectify:

ofy().async().put(object);

Это возвращает Result‹ Key‹ ObjectEntity>>, и я могу вызвать

Result<Key<ObjectEntity>> result = ofy().async().put(object);

И затем я могу вызвать .get() для блокировки, пока не получу результат:

Key<ObjectEntity> objectKey = result.get();

Но что я могу сделать с этим objectKey, чтобы вернуть свою объектную сущность? В основном я хочу иметь возможность отправить это как объект обратно в GWT.


person spierce7    schedule 23.11.2011    source источник
comment
хотел уточнить, вы хотите отправить ключ обратно в ure webapp? но просто чтобы вы знали, вам действительно не нужно удерживать ключевой объект, чтобы иметь возможность получить объект... вы вставите объект с некоторым идентификатором в хранилище данных, а затем, когда вы захотите получить свой объект , вы должны создать новый ключ: новый новый ключ‹Car›(Entity.class,entityId)   -  person Nadir Muzaffar    schedule 24.11.2011
comment
Почему вам нужно вернуть свой объект? Он все еще находится в object, который вы передали исходной операции размещения.   -  person Nick Johnson    schedule 24.11.2011
comment
Надир, я поместил объект в хранилище данных, и все, что я могу получить, это ключ объекта. Я хочу реальный объект. Если я делаю неасинхронное получение, это то, что я получаю обратно.   -  person spierce7    schedule 24.11.2011
comment
Ник, причина, по которой я хочу, чтобы обновленный объект возвращал его, заключается в том, что я конвертирую свое приложение из jdo, и так работает мое текущее приложение. Кроме того, я считаю, что были и другие экземпляры, которые мне нужно было преобразовать из ключа в исходный объект. Моя жизнь была бы намного проще, если бы это было возможно без вызова каждой значимой записи ключа для восстановления объекта. Это рано, но я полагаю, что у меня была такая же проблема с асинхронным получением, что могло бы произойти, когда у меня нет доступа к объекту, который я поместил.   -  person spierce7    schedule 24.11.2011


Ответы (1)


Это должно вернуть ваш объект:

Result<Foo> fooResult = ofy.async().get(Foo.class, "foo1-id");
Foo foo = fooResult.get();

Я немного попробовал свои силы с Objectify, поэтому я определенно не эксперт, но вы можете убедиться, что если вы помещаете объект в хранилище данных с помощью асинхронного вызова put, вы блокируете его до тех пор, пока он не будет вставлен в хранилище. хранилище данных перед вызовом. Если вам в конечном итоге потребуется извлечь объект сразу после его вставки, вы лишитесь цели использования async.put().

Также вы, вероятно, знаете об этом, но ребята из Objectify проделали достойную работу по составлению своего API Javadoc для справки.

person Nadir Muzaffar    schedule 25.11.2011