【问题标题】:How to generate a random string for ID/Name of an Entity instead of a number?如何为实体的 ID/名称生成随机字符串而不是数字?
【发布时间】:2013-05-01 17:16:31
【问题描述】:

我正在使用低级数据存储 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”字段中的内容。但我没有办法做到这一点。

谢谢

【问题讨论】:

  • 有了新的 SDK 和即将发布的 appengine 版本,ID 编号将变得稀疏(即没有特定顺序的非常大的数字),因此没有人可以从中推断出数量。在当前的 SDK 中,我的 id 类似于 6042986275001073664、5241627016305836032

标签: java google-app-engine


【解决方案1】:

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

String uuid = UUID.randomUUID().toString();

【讨论】:

    【解决方案2】:

    您可以使用 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) 传递您的实体密钥的字符串表示形式,根据您的安全需要,可能在加密之后。

    【讨论】:

      猜你喜欢
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多