在App Engine上生成唯一的长ID

时间:2015-05-31 21:41:27

标签: google-app-engine objectify google-cloud-datastore

用户可以通过三种方式登录我们的服务:

  • 登录和密码
  • 谷歌+

我想将所有这些用户ID保存在一个实体中。为了避免例如之间的id碰撞Google和Facebook的前缀将分别添加到ID(g-f-)。目前,对于具有标准登录的用户,App Engine会生成唯一的Long值(使用Objectify @Id Long设置为null作为ID的值。

要将所有内容保存在一个实体中,密钥必须与String的类型相同。 Objectify中没有为String自动生成密钥的选项。

我需要为给定实体生成唯一Long值,该值将以c-为前缀(自定义登录)。这会使String ID类似于Google和Facebook。我搜索了Objectify的代码,但发现与Long注释的null Long字段生成唯一@Id ID无关。

1 个答案:

答案 0 :(得分:3)

如果您想要一个等于自动生成ID的值,请调用:

factory().allocateId(Thing.class).getId();

或者,您可以在低级API的基础allocateIds上使用DatastoreService方法。甚至是UUID.randomUUID()

然而,这听起来很奇怪。通常,您希望能够将Facebook ID或Google ID映射到Human对象。我个人使用查找实体 - FacebookIdGoogleId执行此操作,其字符串ID是FB或G发出的确切ID。这不应该是合成密钥,否则您将如何查找它?