Загрузка коллекции перечислений в хранилище данных Google app engine
-
19-09-2019 - |
Вопрос
Я использую хранилище данных Goole app engine с Java и пытаюсь загрузить объект со списком перечислений.Каждый раз, когда я загружаю объект, список имеет значение null.Объект является
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ObjectToSave {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;
@Persistent
private List<AnEnum> anEnumList;
//public getters and setters
}
Перечисление простое
public enum AnEnum {
VALUE_1,
VALUE_2;
}
Код для его сохранения таков
ObjectToSave objectToSave = new ObjectToSave();
List<AnEnum> anEnumList = new ArrayList<AnEnum>();
anEnumList.add(AnEnum.VALUE_1);
objectToSave.setAnEnumList(anEnumList);
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
pm.makePersistent(objectToSave);
} finally {
pm.close();
}
Код для его загрузки таков
PersistenceManager pm = pmfInstance.getPersistenceManager();
try {
Key key = KeyFactory.createKey(ObjectToSave.class.getSimpleName(), id);
ObjectToSave objectToSave = pm.getObjectById(ObjectToSave.class, key);
} finally {
pm.close();
}
Я могу просмотреть данные в хранилище данных, используя http://localhost:8080/_ah/admin и могу видеть, что мой список был сохранен, но его там нет, когда объект загружен.
Я создал свой проект с помощью плагина Eclipse и, насколько мне известно, не вносил никаких изменений в настройки хранилища данных.Так почему же мой список перечислений имеет значение null?
Решение
Да, но ваше поле списка не входит в группу выборки по умолчанию при загрузке, поэтому, следовательно, не загружается.Читать Группы выборки JDO.Вы можете добавить его в DFG, или включить пользовательскую группу выборки, или просто "коснуться" поля перед закрытием PM.
--Энди (Ядро данных)
Другие советы
Как вы создаете экземпляр ObjectToSave?Значение по умолчанию для всех ссылочных типов переменных экземпляра равно null, поэтому, если у вас нет (дополнительного) кода для создания экземпляра List<AnEnum>
и назначьте его anEnumList
, ожидалось бы значение null.