Как получить запись из хранилища данных по позиции, в которой она была добавлена?(Google App Engine и JDO) - PullRequest
0 голосов
/ 29 июня 2011

Вот мой пример:
Добавить новую запись в хранилище данных // позиция 1
Добавить новую запись в хранилище данных // позиция 2
Добавить новую запись в хранилище данных // позиция 3

Теперь я хочу получить запись, которая была добавлена ​​в позиции 2. Как это можно сделать с помощью Google App Engine и JDO?

Похоже, что один из способов - присвоить PrimaryKey Long ID и затем использовать getObjectById. Поэтому длинный идентификатор будет равен сохранению позиции автоматически хранилищем данных.
Код, который показывает это:

import javax.jdo.annotations.*;
import javax.jdo.PersistenceManager;
import mypackage.PMF

public class Entry {
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Long ID;

  //.. other fields
}


// create entries (suppose datastore is empty and i don't need deletes in future)
PersistenceManager pm = PMF.get().getPersistenceManager()
for(int i=0; i<10; i++){
  pm.makePersistent(new Entry());
}
// created entries have their IDs exaclty = 1,2,3,4,5,6,7,8,9,10 ?

// fetch entry, that was added second
Key entryKey = KeyFactory.createKey(Entry.class.getSimpleName(), 2L);
Entry secondEntry = pm.getObjectById(Entry.class, entryKey);  

Могу ли я быть уверен, что поле Long ID всегда будет увеличиваться на 1 для новой записи и будет равно 1 для первой? Или есть другой лучший способ? :)

1 Ответ

2 голосов
/ 30 июня 2011

Это понятие «позиция» не является концепцией App Engine.App Engine не гарантирует, что сгенерированные системой идентификаторы будут назначаться последовательно без пропусков.

См. http://code.google.com/appengine/docs/java/datastore/entities.html#Kinds_IDs_and_Names

Вы можете самостоятельно назначить идентификатор, если вы осторожны, но,в зависимости от вашего приложения и схемы его использования создание собственных идентификаторов создает узкое место, которое ограничивает вашу способность быстро создавать новые объекты.

...