我一直遇到使用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一起工作,因为它需要具体的类型。
针对上述问题的任何解决方案?
提前致谢。
肖恩
答案 0 :(得分:1)
总而言之,您似乎想要一组对多态实体的引用。这样做:
@Entity
class AnimalInfo {
@Id String id;
Collection<Ref<Animal>> animals = new ArrayList<Ref<Animal>>();
}
您需要Refs来创建对其他实体的引用。你也可以使用Key,但不太方便。您可能还想查看@Load
注释。