2014-07-16 2 views
0

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

datastore.put(en); 
    String key = en.getKey(); 

Затем ключ отправляется в другой сервлет, как String, как 4644337115725824. И когда я пытаюсь получить Entity этим кодом

Key key = KeyFactory.createKey("User", req.getParameter("key")); 
    Entity en = datastore.get(key); 

На последней строке у меня есть EntityNotFoundException и «Нет сущность была найдена под ключ: User ("4644337115725824") ' Что случилось?

+0

Убедитесь, что ключевые матчи с ключом в хранилище данных, EntityNotFoundException возникает только тогда, когда в хранилище данных нет соответствия – Bharath

+0

. Ключевые матчи. –

+0

'Entity.getKey()' возвращает 'Key', а не' String', поэтому, если вы хотите получить идентификатор от ключа для передачи другому сервлету, вам нужно вызвать 'Key.getID()' (для идентификатора 'Long') или' Key.getName() 'для идентификатора' String'. Что вы видите в средстве просмотра хранилища данных для этого объекта? – tx802

ответ

0

Я думаю, у вас может возникнуть проблема сериализации/десериализации для ключа. Чтобы сериализовать ключ в websafe строки, используйте KeyFactory.keyToString(key):

Key key = entity.getKey(); 
String serializedKey = KeyFactory.keyToString(key); 

Позже, когда вы десериализации ключ на другой сервлет, вы можете использовать KeyFactory.stringToKey(string):

Key deserializedKey = KeyFactory.stringToKey(serializedKey); 
Entity en = datastore.get(deserializedKey); 
+0

спасибо, это сработало –

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