1

私は次のようなJavaモデルを持っています:

public class Country {
    @Id private String id;
    private CurrencyId currencyId;
    private List<Province> provinceList;
    ...
}

public class Province {
    @Id private String id;
    private Gobernor gobernorId;
    private List<City> cityList;
    ...
}

public class City {
    @Id private String id;
    private String name;
    ...
}

objectifyを使用してそのデータを保存したいと思います。ただし、国データが変更される可能性があるため、国データが保存された日付も保存したいので、次のようなエンティティを保存する必要があると思います。

public class CountryListEntity {
    @Id private String id;
    private List<Country> countryList;
    private Date storeDate;
}

そのように保存できる場合は、IDが「root」のCountryListEntityの種類のエンティティが1つだけあることに注意してください。Googleアプリがデータを保存する方法とobjectifyがどのように機能するかについてはほとんど知りません。@Embeddedの多くの組み合わせを試しましたが、多くのエラーが発生しました。

@Embedded配列またはコレクション内に配列またはコレクションのプロパティを配置することはできません

誰かがこれらのクラスを定義する方法を教えてもらえますか?この「ルート」エンティティを保存および取得するために必要なコードのスニペットをいただければ幸いです。

4

1 に答える 1

2

@Embeddedコレクションは、低レベルエンティティの一連のコレクションフィールドに変換されます。そのため、1つのレベルの埋め込みですべてを実行できます。

すべてのデータを一度に保存/ロードする場合で、エンティティが例のエンティティと同じくらい単純な場合は、リストの@Serializedアノテーションを@Embeddedリスト内に配置できます。

このディスカッションから詳細を確認できます。

このアプローチの問題は、低レベルの埋め込みにインデックスを付けることができないことです。

public class CountryListEntity {
    @Id private String id;

    @Embedded 
    private List<Country> countryList;

    private Date storeDate;
}

public class Country implements Serializable {
    private String id;
    private CurrencyId currencyId;

    @Serialized
    private List<Province> provinceList;
    // ...
}

public class Province implements Serializable {
    private String id;
    private Gobernor gobernorId;

    @Serialized
    private List<City> cityList;
    // ...
}

public class City implements Serializable {
    private String id;
    private String name;
    // ...
}
于 2012-05-06T19:11:39.213 に答える