通过密钥获取GAE实体

时间:2011-02-23 20:12:28

标签: 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)”)

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

2 个答案:

答案 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)