0

我一直在使用 Objectify4 在 Google 数据存储上保存通用集合时遇到问题。例如

@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,因为它需要具体类型。

以上问题有什么解决办法??


提前致谢。

肖恩

4

1 回答 1

1

To summarize, it looks like you want a collection of references to polymorphic entities. Do this:

@Entity
class AnimalInfo {
  @Id String id;
  Collection<Ref<Animal>> animals = new ArrayList<Ref<Animal>>();
}

You need Refs to create the reference to the other entities. You could use Key too, but it will be less convenient. You may also want to look into the @Load annotation.

于 2013-04-25T19:02:09.793 回答