Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过密钥获取GAE实体_Java_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Java 通过密钥获取GAE实体

Java 通过密钥获取GAE实体,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我一直在尝试通过其键从GAE数据存储中获取一个实体,该键的类型为key。下面是我用来检索密钥的代码: strId = myVideo.getKey().toString(); myVideo的类型是实体。myVideo.getKey().toString()方法返回的值是“Video(121)”。下面是试图通过实体键检索实体的代码: Entity video = ds.get(key); 尝试从数据存储检索实体时引发以下异常: 找不到与密钥匹配的实体: 视频(“视频(121)”) 有没有办法

我一直在尝试通过其键从GAE数据存储中获取一个实体,该键的类型为key。下面是我用来检索密钥的代码:

strId = myVideo.getKey().toString();
myVideo的类型是实体。
myVideo.getKey().toString()
方法返回的值是“Video(121)”。下面是试图通过实体键检索实体的代码:

Entity video = ds.get(key);
尝试从数据存储检索实体时引发以下异常:

找不到与密钥匹配的实体: 视频(“视频(121)”)


有没有办法从实体类型的对象获取编码密钥?

在应用程序引擎文档中记录了在密钥和字符串之间转换的各种方法。简而言之,要获取密钥的字符串版本,您需要执行以下操作:

String employeeKeyStr = KeyFactory.keyToString(employeeKey);
要将其转换回可以使用
ds.get()
获取的密钥,应执行以下操作:

Key employeeKey = KeyFactory.stringToKey(employeeKeyStr);
使用
.toString()
获取的字符串版本是密钥的可读版本,不打算作为机器可读标识符传递


当然,如果您打算在代码中传递键,则根本不需要将它们转换为字符串。相反,如果您想将它们用作外部标识符,则可能需要阅读链接部分的其余部分,其中讨论祖先、ID和名称;大多数情况下,当您想要传递标识符时,仅使用名称或ID就足够了,并且比完整的键更短、可读性更强。

我发现在
KeyFactory.createKey(Video.class.getSimpleName()、Integer.parseInt(videoID))中传递字符串类型是问题的原因。如果您使用的是key类型的键,则该键需要包含一个整数,因此数据类型转换为:
integer.parseInt(videoID)

您是否尝试查看GAE控制面板?检查实体是否确实存在于数据存储中?是的,我已经验证了该实体是否存在于数据存储中。我需要将键转换为字符串的原因是,我正在通过ajax json调用将键的值传递给表示层。@Tim您可能希望只传递ID或名称,这更紧凑、更方便用户,正如我在回答的最后所建议的那样。