Постоянная коллекция<T> с использованием Objectify4 в GAE
У меня возникли проблемы с сохранением универсальной коллекции в хранилище данных Google с помощью Objectify4. Например
@Entity
class AnimalInfo
{
@Id
String id;
Collection<Animal> animals;
}
@EntitySubClass
class Cat extends Animal
{
String name;
}
@EntitySubClass
class Dog extends Animal
{
String name;
}
@Entity
class Animal
{
@Id
String id;
}
Как я могу сохранить класс AnimalInfo и получить его снова. Я пытался:objectify.save().entities(animalInfo).now();
но, возвращая его снова: objectify.load().type(AnimalInfo.class).id(animalInfo.id).get();
не имеет name
поле, соответствующее расширенному классу Cat или Dog.
Это также вероятно логично, потому что у класса Animal нет поля name
, Но как мне заставить это работать? Универсальный интерфейс IAnimal (вместо класса Animal) является лучшим решением по дизайну, но он не работает с Objectify, поскольку ему нужны конкретные типы.
Любое решение для вышеуказанной проблемы?
Заранее спасибо.
Shaun
1 ответ
Подводя итог, похоже, что вы хотите коллекцию ссылок на полиморфные объекты. Сделай это:
@Entity
class AnimalInfo {
@Id String id;
Collection<Ref<Animal>> animals = new ArrayList<Ref<Animal>>();
}
Вам нужны ссылки для создания ссылки на другие объекты. Вы также можете использовать ключ, но это будет менее удобно. Вы также можете посмотреть в @Load
аннотаций.