Генерация идентификатора в низкоуровневом API

Я должен использовать API низкого уровня, чтобы сохранить сущность типа Value в Google App Engine. Я искал и нашел только примеры таким образом:

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 (идентификатор Value), потому что мне нужно, чтобы он генерировался как последовательность. Это был бы способ сделать это в низкоуровневом API, как это делается в JDO:

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

Как я могу получить идентификатор на низком уровне или настроить его для генерации в виде последовательности?

Благодарю.

2 ответа

Решение

Entity класс имеет много конструкторов. Используйте тот, который принимает одну строку - доброе имя - и идентификатор будет сгенерирован для вас, когда вы сохраните его в хранилище данных.

Возможно, попробуйте использовать "allocateIds", чтобы выделить диапазон идентификаторов для использования? Это даст вам набор зарезервированных ключей для использования. Я сомневаюсь, что вы сможете получить строгую последовательность, такую ​​как в реляционных базах данных, но, по крайней мере, вы сможете получить гарантированные уникальные и пригодные для использования ключи.

Смотрите документацию для DatastoreService:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreService.html

Также для дальнейшего руководства вы можете взглянуть на то, как Datanucleus использует этот API:

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

Другие вопросы по тегам