Получение GAE Entity по ключу - PullRequest
       14

Получение GAE Entity по ключу

4 голосов
/ 23 февраля 2011

Я пытался получить сущность из хранилища данных GAE по его ключу, который имеет тип Key.Вот код, который я использую для получения ключа:

strId = myVideo.getKey().toString();

Тип myVideo - Entity.Значение, которое возвращает метод myVideo.getKey().toString(), равно «Video (121)».Вот код, который пытается извлечь сущность через ключ сущности:

Entity video = ds.get(key);

При попытке извлечь сущность из хранилища данных выдается следующее исключение:

Ни одна сущность не быланайдено соответствие ключа: Видео ("Видео (121)")

Есть ли способ получить закодированный ключ от объекта типа Entity?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2011

Различные способы преобразования между ключами и строками описаны в документации по App Engine здесь . Короче говоря, чтобы получить строковую версию ключа, вы хотите сделать это:

String employeeKeyStr = KeyFactory.keyToString(employeeKey);

Чтобы преобразовать его обратно в ключ, который вы можете получить с помощью ds.get(), вы должны сделать это:

Key employeeKey = KeyFactory.stringToKey(employeeKeyStr);

Строковая версия, которую вы извлекаете с помощью .toString(), - это читаемая человеком версия ключа, не предназначенная для передачи в виде машиночитаемого идентификатора.

Конечно, если вы намереваетесь передавать ключи по своему коду, вам вообще не нужно преобразовывать их в строки. И наоборот, если вы хотите использовать их в качестве внешних идентификаторов, вы, вероятно, захотите прочитать оставшуюся часть связанного раздела, в котором обсуждаются предки, идентификаторы и имена; Большую часть времени, когда вы хотите передать идентификаторы, будет достаточно одного имени или идентификатора, и оно будет короче и более читаемым, чем полный ключ.

2 голосов
/ 24 февраля 2011

Я обнаружил, что передача строкового типа в KeyFactory.createKey(Video.class.getSimpleName(), Integer.parseInt(videoID)); была причиной проблемы.Ключ должен состоять из целого числа, если вы используете ключ типа Key, поэтому приведение типа данных: Integer.parseInt(videoID).

...