2012-05-06 18 views
1

私は次のようにJavaのモデルがあります:私はそのデータを保存したいを含むクラスを格納する方法GAEとObjectifyを使用してリストを含むクラスのリストを格納する方法は?

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; 
    ... 
} 

を客観使用。私は唯一の種類CountryListEntityの1つの実体を持つことになります

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

注:ただし、国のデータが変更される可能性があるとして、私はまた、国のデータが格納されていたので、私は、私のようなエンティティを保存すべきだと思う日付を保存したいです私がそれを好きに保管することができれば、 "root"というIDで。私は、Google Appsのデータの保存方法とオブジェクト化の仕組みの両方についてほとんど知っていません。誰がどのようにこれらのクラスを定義するに教えてもらえます

私は@Embeddedの多くの組み合わせを試してみたが、私は多くのエラーを得た、すなわち

@Embedded配列またはコレクション内の配列またはコレクションのプロパティを配置することはできません?この「ルート」エンティティを格納および取得するために必要なコードのスニペットは、高く評価されます。

+0

「CountryListEntity」の意味を理解できません。 Country-objectの変更日を追加しますか?この場合、[@ PrePersist](http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Lifecycle_Callbacks)Objectifyの注釈が役立ちます。 –

+0

あなたがここで何をしようとしているのかははっきりしない。国、都道府県、都市をリンクして別のエンティティとして保管しますか?この情報を単一のエンティティに埋め込みたいですか? ObjectifyのConceptsドキュメントとGAE SDKのStoring Dataドキュメントを読んでください。 – stickfigure

+0

@stickfigure別々のエンティティであるかどうかは気にしません。一度にすべてのデータを保存/ロードするつもりです。リストを保存することは可能でしたが、List of Countriesを保存することは、州と都市を格納することも意味します。これが不可能な場合は、それらを別々のエンティティとして保存しても構いません。 –

答えて

2

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

すべてのデータを一度に保存/ロードする場合、エンティティがサンプルのものと同じくらい簡単な場合は、リストの@Serialized注釈を@埋め込みリストに入れることができます。

this discussionから詳細を見つけることができます。

この方法の問題は、低レベルの埋め込みをインデックスに登録できないことです。

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; 
    // ... 
} 
+0

私は '@ Serialized'を避けようとしていましたが、別の方法はありません。コードについてのちょっとしたコメント。すべての '@ Id'ではなく、' CountryListEntity'からのものは必要ありません。さらに、 'CountryListEntity'を除くすべてのクラスは' Serializable'を実装しなければなりません。少なくともそれはドキュメントに書かれているとおりであり、これらのステップを踏んだ後にうまくいきます。ありがとう! –

+0

はい、本当に申し訳ありませんがシリアル化可能なインターフェイスに言及していないため、私はあなたが提案したように、答えを更新しました。 – turan

関連する問題