用户可以通过三种方式登录我们的服务:
我想将所有这些用户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无关。
答案 0 :(得分:3)
如果您想要一个等于自动生成ID的值,请调用:
factory().allocateId(Thing.class).getId();
或者,您可以在低级API的基础allocateIds
上使用DatastoreService
方法。甚至是UUID.randomUUID()
。
然而,这听起来很奇怪。通常,您希望能够将Facebook ID或Google ID映射到Human对象。我个人使用查找实体 - FacebookId
或GoogleId
执行此操作,其字符串ID是FB或G发出的确切ID。这不应该是合成密钥,否则您将如何查找它?