4 votes

Obtenir une entité GAE par clé

J'ai essayé d'obtenir une entité de GAE datastore par sa clé, qui est de type Key. Voici le code que j'utilise pour récupérer la clé :

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

Le type de myVideo est Entity. La valeur que le myVideo.getKey().toString() retourne est "Video(121)". Voici le code qui tente de récupérer l'entité via la clé de l'entité :

Entity video = ds.get(key);

L'exception suivante est levée lors de la tentative de récupération de l'entité à partir du datastore :

Aucune entité n'a été trouvée correspondant à la clé : Video("Video(121)")

Existe-t-il un moyen d'obtenir la clé codée d'un objet de type Entity ?

5voto

Nick Johnson Points 79909

Les différentes façons de convertir les clés en chaînes de caractères sont documentées dans la documentation de l'App Engine. aquí . En bref, pour obtenir une version de la clé sous forme de chaîne, vous devez procéder comme suit :

String employeeKeyStr = KeyFactory.keyToString(employeeKey);

Pour le reconvertir en une clé que vous pouvez récupérer avec ds.get() vous devriez le faire :

Key employeeKey = KeyFactory.stringToKey(employeeKeyStr);

La version de la chaîne de caractères que vous récupérez avec .toString() est une version de la clé lisible par l'homme, qui n'est pas destinée à être transmise comme un identifiant lisible par une machine.

Bien sûr, si vous avez l'intention de faire passer des clés dans votre code, il n'est pas nécessaire de les convertir en chaînes de caractères. À l'inverse, si vous souhaitez les utiliser comme identifiants externes, vous devriez probablement lire le reste de la section liée, qui traite des ancêtres, des ID et des noms ; la plupart du temps, lorsque vous souhaitez faire circuler des identifiants, le nom ou l'ID seul suffit, et il est plus court et plus lisible que la clé complète.

2voto

Tim Points 158

J'ai découvert que le fait de passer un type de chaîne dans la fonction KeyFactory.createKey(Video.class.getSimpleName(), Integer.parseInt(videoID)); était la cause du problème. La clé doit être constituée d'un entier si vous utilisez une clé de type Key, d'où le cast de type de données : Integer.parseInt(videoID) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X