Генерация идентификатора в низкоуровневом API - PullRequest
1 голос
/ 18 марта 2011

I должен использовать 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);

Моя проблема в том, что я заранее не знаю идентификатор (идентификатор значения), потому что мне нужно, чтобы он генерировался как последовательность. Это был бы способ сделать это в низкоуровневом API, как это делается в JDO как:

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

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

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

0 голосов
/ 18 марта 2011

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

См. Документацию для 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

...