Java 如何为实体的ID/名称而不是数字生成随机字符串?
我正在使用低级数据存储API。我创建了这样一个实体: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
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