Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为实体的ID/名称而不是数字生成随机字符串?_Java_Google App Engine - Fatal编程技术网

Java 如何为实体的ID/名称而不是数字生成随机字符串?

Java 如何为实体的ID/名称而不是数字生成随机字符串?,java,google-app-engine,Java,Google App Engine,我正在使用低级数据存储API。我创建了这样一个实体: Entity entity = new Entity("Error"); entity.setProperty("description", "foo"); 在数据存储查看器中,我选择了以下内容: Key Write Ops ID/Name description ---------------------------------------------- ahN0c... 4 259

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

Entity entity = new Entity("Error");
entity.setProperty("description", "foo");
在数据存储查看器中,我选择了以下内容:

Key        Write Ops   ID/Name    description
----------------------------------------------
ahN0c...   4           259        foo
因此,ID/Name字段将自动为我生成,因为我没有在实体构造函数中提供任何内容。它生成一个“ID”而不是“Name”,后者是一个数字而不是不透明的字符串(如“Key”值)

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

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


感谢我使用UUID创建随机字符串的类似任务

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

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

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

您甚至可以通过KeyFactory传递实体密钥的字符串表示形式。keyToString(密钥)可能在加密之后,具体取决于您的安全需要。

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