在低级API中生成id

时间:2011-03-18 09:53:53

标签: java google-app-engine datastore low-level-api

必须使用低级API 才能在Google App Engine中保留Value类型的实体。我一直在寻找,我只是以这种方式找到了一个例子:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key k = KeyFactory.createKey(Value.class.getSimpleName(), id);
Entity entity = new Entity(k);
entity.setProperty("column1", value.getColumn1());
entity.setProperty("column2", value.getColumn2());
datastore.put(entity);

我的问题是我事先并不知道id(标识符的值),因为我需要将它作为序列生成。这将是在低级API中执行此操作的方式,因为它在JDO中完成:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;

如何检索低级别的ID或将其配置为序列生成?

感谢。

2 个答案:

答案 0 :(得分:1)

Entity类有许多构造函数。使用带有单个字符串的那个 - 类型名称 - 当您将其存储在数据存储区中时,将为您生成ID。

答案 1 :(得分:0)

也许尝试使用“allocateIds”分配一系列ID来使用?这将为您提供一组要使用的保留键。我怀疑你是否能够获得严格的序列,例如在关系数据库中,但至少你可以获得有保证的唯一和可用的密钥。

请参阅DatastoreService的文档:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService.html#allocateIds%28com.google.appengine.api.datastore.Key,%20java.lang.String,%20long%29

另外,如需进一步指导,您可以查看Datanucleus如何使用此API:

http://code.google.com/p/datanucleus-appengine/source/browse/trunk/src/org/datanucleus/store/appengine/valuegenerator/SequenceGenerator.java?r=473