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();しかし、それを再び取得している間:拡張クラスのCatまたはDogに対応するフィールドobjectify.load().type(AnimalInfo.class).id(animalInfo.id).get();がありません。name

Animal クラスにはフィールドがないため、これもおそらく論理的ですname。しかし、どうすればこれを機能させることができますか? ジェネリック インターフェイス IAnimal (Animal クラスの代わり) は、設計上はより優れたソリューションですが、具体的な型が必要なため、Objectify では機能しません。

上記の問題の解決策はありますか??


前もって感謝します。

ショーン

4

1 に答える 1

1

要約すると、ポリモーフィック エンティティへの参照のコレクションが必要なようです。これを行う:

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

他のエンティティへの参照を作成するには、参照が必要です。Key も使用できますが、あまり便利ではありません。@Load注釈を調べることもできます。

于 2013-04-25T19:02:09.793 に答える