Генерация идентификатора в низкоуровневом 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:
Также для дальнейшего руководства вы можете взглянуть на то, как Datanucleus использует этот API: