Java 通过密钥获取GAE实体
我一直在尝试通过其键从GAE数据存储中获取一个实体,该键的类型为key。下面是我用来检索密钥的代码: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)”) 有没有办法
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或名称,这更紧凑、更方便用户,正如我在回答的最后所建议的那样。