2015-09-18 1 views
0

Я переношу некоторые объекты из старого приложения appengine в новое (одна из причин, по которой другие могут перейти к объективизации 5).«Превышено максимальное количество выделенных идентификаторов» -Exception при назначении KeyRange (AppEngine Objectify)

Есть также некоторые объекты, которые имеют автоматически генерируемый длинный идентификатор. Теперь мне нужно вернуться allocate the ids (см. Также обсуждение javadoc и this) в новом хранилище данных.

Это важные строки:

Long id = anEntity.getId(); 
com.google.appengine.api.datastore.KeyRange keyRange = new com.google.appengine.api.datastore.KeyRange(null, AnEntity.class.getName(), id-1l, id+1l); 

KeyRange<AnEntity> keys = new KeyRange<>(keyRange); 

OfyService.ofy().factory().allocateIdRange(keys); 

Однако это не работает как исключение ниже отбрасывается:

java.lang.IllegalArgumentException: Exceeded maximum allocated IDs 
    at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:54) 
    at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:127) 
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:96) 
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88) 
    at com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:76) 
    at com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:36) 
    at com.google.appengine.api.datastore.DatastoreServiceImpl.allocateIdRange(DatastoreServiceImpl.java:121) 
    at com.googlecode.objectify.ObjectifyFactory.allocateIdRange(ObjectifyFactory.java:335) 

я проверил его Дополнительной обнаружил, что линии

KeyRange(null, AnEntity.class.getName(), 1, 1000000000l); 

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

  1. ли я сделал какую-то ошибку или делает allocateIdRange-метод не поддерживает такие большие идентификаторы (как намекал here a long ago)?

  2. Если последний, как я могу обойти эту проблему? (я думал о создании новых идентификаторов в определенном диапазоне, но here они говорят, что наследие-путь, скоро будет удален ... К тому же мне не нравится идея создания его самостоятельно.)

система: - Java 7 - AppengineSDK 1.9.21 - объективировать версия: 4.1.3 (как было сказано, Я проникаю)

Спасибо за любую помощь.

ответ

0

Я изменил код так, чтобы он назначил String и сгенерировал эту строку с UUID. Это решает проблему, но все же это странное поведение allocateIdRange ...

См. Также это issue.

Смежные вопросы