1

我正在使用低级数据存储 API。我创建了一个这样的实体:

Entity entity = new Entity("Error");
entity.setProperty("description", "foo");

在数据存储查看器中,我看到了这个:

Key        Write Ops   ID/Name    description
----------------------------------------------
ahN0c...   4           259        foo

所以 ID/Name 字段将自动为我生成,因为我没有在 Entity 构造函数中提供任何内容。它生成一个“ID”而不是“Name”,它是一个数字而不是一个不透明的字符串(如“Key”值)。

有没有办法让数据存储为实体的“ID/名称”字段生成一个随机的“名称”而不是“ID”?

我问是因为如果我与第三方共享此 ID,他们可能会开始大致计算出我的系统中有多少错误实例。我宁愿给他们一个不透明的字符串作为查找 ID,类似于自动生成的“Key”字段中的内容。但我看不出有办法做到这一点。

谢谢

4

2 回答 2

2

对于类似的任务,我使用 UUID 创建一个随机字符串。

String uuid = UUID.randomUUID().toString();
于 2013-05-01T17:38:10.870 回答
0

您可以使用 com.google.appengine.api.datastore.KeyFactory,结合@Devolus 的答案,它看起来像

final Key key = KeyFactory.createKey("Error", UUID.randomUUID().toString());
final Entity e = new Entity(key);

您甚至可以通过 KeyFactory.keyToString(key) 传递您的实体密钥的字符串表示形式,根据您的安全需求可能在加密之后。

于 2013-05-01T20:16:36.253 回答