我一直在尝试通过其密钥来获取GAE数据存储区中的实体,该密钥类型为Key。这是我用来检索密钥的代码:
strId = myVideo.getKey().toString();
myVideo的类型是实体。 myVideo.getKey().toString()
方法返回的值是“Video(121)”。以下是尝试通过实体密钥检索实体的代码:
Entity video = ds.get(key);
尝试从数据存储中检索实体时会抛出以下异常:
找不到与密钥匹配的实体: 视频( “视频(121)”)
有没有办法从Entity类型的对象中获取编码密钥?
答案 0 :(得分:4)
App Engine文档here中介绍了在密钥和字符串之间进行转换的各种方法。简而言之,要获得密钥的字符串版本,您需要这样做:
String employeeKeyStr = KeyFactory.keyToString(employeeKey);
要将其转换回您可以使用ds.get()
获取的密钥,您应该这样做:
Key employeeKey = KeyFactory.stringToKey(employeeKeyStr);
使用.toString()
获取的字符串版本是密钥的人类可读版本,不打算作为机器可读标识符传递。
当然,如果您打算在代码周围传递密钥,则根本不需要将它们转换为字符串。相反,如果您想将它们用作外部标识符,您可能希望阅读链接部分的其余部分,其中讨论了祖先,ID和名称;大多数情况下,当您想要传递标识符时,仅使用名称或ID就足够了,并且比完整密钥更短,更易读。
答案 1 :(得分:2)
我发现在KeyFactory.createKey(Video.class.getSimpleName(), Integer.parseInt(videoID));
中传入字符串类型是导致问题的原因。如果您使用Key类型的键,则键需要包含整数,因此数据类型为:Integer.parseInt(videoID)
。