1

必须使用低级 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 或将其配置为序列生成?

谢谢。

4

2 回答 2

1

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

于 2011-03-18T19:18:46.320 回答
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

于 2011-03-18T12:35:33.840 回答