Постоянная коллекция<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 аннотаций.

Другие вопросы по тегам