在 App Engine 上生成唯一的 Long Id
Generate unique Long Id on App Engine
用户可以通过三种方式登录我们的服务:
- 登录名和密码
- Google+
- 脸书
我想将所有这些用户 ID 保存在一个实体中。为了避免 id 之间的冲突,例如Google 和 Facebook a 前缀将添加到 id(分别为 g-
和 f-
)。目前对于使用标准登录的用户,App Engine 生成一个唯一的 Long
值(使用 Objectify @Id Long
值设置为 null
作为 id)。
要将所有内容保存在一个实体中,键必须是同一类型,即 String
。 Objectify 中没有为 String
自动生成密钥的选项。
我需要的是为给定的实体生成唯一的 Long
值,该值将以 c-
为前缀(自定义登录)。这将使 String
id 类似于 Google 和 Facebook。我搜索了 Objectify 的代码,但没有发现与为 null
Long
字段生成唯一 Long
id 相关的内容,这些字段用 @Id
.
注释
如果您想要一个等同于自动生成的 ID 的值,请调用:
factory().allocateId(Thing.class).getId();
或者,您可以在低位API的底层DatastoreService
上使用allocateIds
方法。甚至 UUID.randomUUID()
.
然而,这听起来很奇怪。通常,您希望能够从 Facebook id 或 Google id 映射到您的 Human 对象。我个人使用查找实体 - FacebookId
或 GoogleId
执行此操作,其字符串 ID 是 FB 或 G 分发的确切 ID。这不应该是合成键,否则你将如何查找它?
用户可以通过三种方式登录我们的服务:
- 登录名和密码
- Google+
- 脸书
我想将所有这些用户 ID 保存在一个实体中。为了避免 id 之间的冲突,例如Google 和 Facebook a 前缀将添加到 id(分别为 g-
和 f-
)。目前对于使用标准登录的用户,App Engine 生成一个唯一的 Long
值(使用 Objectify @Id Long
值设置为 null
作为 id)。
要将所有内容保存在一个实体中,键必须是同一类型,即 String
。 Objectify 中没有为 String
自动生成密钥的选项。
我需要的是为给定的实体生成唯一的 Long
值,该值将以 c-
为前缀(自定义登录)。这将使 String
id 类似于 Google 和 Facebook。我搜索了 Objectify 的代码,但没有发现与为 null
Long
字段生成唯一 Long
id 相关的内容,这些字段用 @Id
.
如果您想要一个等同于自动生成的 ID 的值,请调用:
factory().allocateId(Thing.class).getId();
或者,您可以在低位API的底层DatastoreService
上使用allocateIds
方法。甚至 UUID.randomUUID()
.
然而,这听起来很奇怪。通常,您希望能够从 Facebook id 或 Google id 映射到您的 Human 对象。我个人使用查找实体 - FacebookId
或 GoogleId
执行此操作,其字符串 ID 是 FB 或 G 分发的确切 ID。这不应该是合成键,否则你将如何查找它?