在GAE上使用Objectify4坚持收集<t> </t>

时间:2013-04-25 16:00:47

标签: google-cloud-datastore objectify

我一直遇到使用Objectify4在Google数据存储上保留通用Collection的问题。 E.g。

@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();没有与扩展类Cat或Dog对应的name字段。

这也可能是合乎逻辑的,因为Animal类没有字段name。但是我如何让它发挥作用?通用接口IAnimal(代替Animal类)在设计方面是更好的解决方案,但是它不能与Objectify一起工作,因为它需要具体的类型。

针对上述问题的任何解决方案?


提前致谢。

肖恩

1 个答案:

答案 0 :(得分:1)

总而言之,您似乎想要一组对多态实体的引用。这样做:

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

您需要Refs来创建对其他实体的引用。你也可以使用Key,但不太方便。您可能还想查看@Load注释。