在 App Engine 上生成唯一的 Long Id

Generate unique Long Id on App Engine

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

我想将所有这些用户 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 对象。我个人使用查找实体 - FacebookIdGoogleId 执行此操作,其字符串 ID 是 FB 或 G 分发的确切 ID。这不应该是合成键,否则你将如何查找它?