Java 在appengine中查找ID的类型

Java 在appengine中查找ID的类型,java,google-app-engine,Java,Google App Engine,给定一个数据存储id,是否有办法找出该id的对象类型。或者,我错误地认为AppEngine中的id是唯一的,而不管其类型如何?我正在Java上使用低级api 谢谢 Klas根据我的经验,您的假设是有效的,数据存储提供的ID似乎是唯一的,无论是哪种类型 编辑: 对不起,我错了。显然,正如Nick在评论中确认的那样,ID保证只对同一类型的ID是唯一的,我的观察结果只适用于开发服务器中的实体 但是,目前要知道什么种类与某个ID关联,唯一的方法恐怕是从数据存储中加载实体并检查getKind()值。如果您

给定一个数据存储id,是否有办法找出该id的对象类型。或者,我错误地认为AppEngine中的id是唯一的,而不管其类型如何?我正在Java上使用低级api

谢谢
Klas

根据我的经验,您的假设是有效的,数据存储提供的ID似乎是唯一的,无论是哪种类型

编辑: 对不起,我错了。显然,正如Nick在评论中确认的那样,ID保证只对同一类型的ID是唯一的,我的观察结果只适用于开发服务器中的实体


但是,目前要知道什么种类与某个ID关联,唯一的方法恐怕是从数据存储中加载实体并检查getKind()值。

如果您有实体键,您可以使用获取该种类(它们实际上是解码键的一部分)


但是,为了使用从id构造完整密钥,您需要该种类。

id仅对给定种类和父实体唯一,而不是全局唯一,因此无法获得仅给定id的实体。如果您不知道该种类,则需要传输编码的实体密钥,而不仅仅是id。

谢谢,但我无法在不知道实体类型的情况下加载实体。KeyFactory需要种类和Id来生成密钥。有什么想法吗?啊,是的,那就成了第二十二条军规了。我唯一想到的是使用
DatastoreServiceFactory.getDatastoreService().getIndexes()
获取应用程序上的所有索引,从每个索引中使用
getKind()
,并构造一组种类,然后尝试使用种类集加载实体,直到得到返回结果的那个。(丑陋的变通方法,我知道)是的,那将是一个变通方法,但非常无效。在我们的问题中,这种类型可能是四到五种已知类型中的一种,因此我们可以尝试迭代这些类型,但即使这样也会导致开销。我希望忽略了一些文档,但可能是没有办法做到这一点。看来,您可以考虑用自己提供的密钥字符串存储实体,而不是要求数据存储为您生成它吗?然后,您可以将密钥上的种类编码为前缀,并使用java.util.UUID生成的唯一字符串将其追加,以确保密钥的唯一性。如果我的回答对你的问题有效,你能接受我的回答吗?事实并非如此。ID仅保证对于给定种类和父实体是唯一的。事实上,它们在dev_appserver(仅!)中是全局唯一的,这是实现的一个意外。谢谢,很高兴知道。我将在此基础上重新审视我的编码。