2011-08-29 4 views
3

がここそこにすべての客観化/アプリエンジンの達人のための質問です。 これはKey型のオブジェクトに格納されます。たとえば、私は車のオブジェクトとタイヤのオブジェクトを持っているとしましょう。 タイヤオブジェクトは親キーをキータイプの変数に格納します。客観化とエンティティグループ

@Entity 
Public class Tire{ 
    @Id Long id; 
    Key<Car> ParentKey; 

    int size; 
} 

私のアプリでは、すべてのタイヤを特定の車に付ける必要があります。私はクエリでこれを行うことができます: タイヤのタイヤ= oft.query(Tire.class).filter( "ParentKey"、carKey).get();

これを達成するための適切な方法ですか?これがエンティティグループの問題を引き起こしますか?これは多数の車とタイヤにとって効率的でしょうか?

答えて

5

今のところ、少なくともapp engineで定義されているように、親子関係は作成されていません。ドキュメントをチェックしてください:車とタイヤが物理的に一緒に保管されるため、親子関係を追加するとスピードアップすることができますが、必要でない場合は削除するのが難しい場合があります。

List<Tyre> tires = ofy().query(Tyre.class).ancestor(carKey).list(); 
+0

これがより効率的になる方法がわかりました。このメソッドは、車に属するタイヤだけを反復します。もし私がすべての車のためにすべてのタイヤを通過する必要があれば?これはエンティティグループの問題を作成します。 – Patrick

+0

@Patric、エンティティのグループ化が必要ですか?トランザクションのほとんどはトランザクションのために使用されます –

+1

トランザクションがあるときはいつでも、エンティティグループが形成されることは私の理解であった。これは車とそのタイヤをエンティティに入れます。少なくともこれは私の理解です。私は、彼らが親の関係で格納されているときにすべてのタイヤを直接照会することが可能かどうか疑問に思っていました。 – Patrick

1

私はまったく同じ方法を使用しています。問題はありません。

私はそこにエンティティグループとの競合が表示されていない、それは

P.S.(少なくとも実体の数千人のために)大規模なグループのために正常に動作しています同じグループに属するデータをフェッチする必要がある場合は、GAEグループを使用する必要はありません。さらに:エンティティグループは、フィルタリングではなく、トランザクションに最適です。

+0

もう一つの問題:特定の車に属するすべてのタイヤを得るために、今すぐ

// Use com.googlecode.objectify.Key instead of // com.google.appengine.api.datastore.Key @Parent Key<Car> parentKey; 

@Parent注釈を追加し、客観化を使用して、親/子関係を作成するには

親エンティティを更新するとどうなるのでしょうか?これによって、そのエンティティのKeyが変更されないため、子に格納されたキーが無効になりますか? – Patrick

+0

IDを変更せずに親エンティティを更新すると、キーは変更されません。 KeyはエンティティのIDの拡張ラッパーです。また、エンティティのID /名前を知っていれば、 'new Key (Car.class、100)'のように問題なしに自分で構築することができます。 ID == 100のエンティティ用に既に格納されているキーと同じ機能を果たし、問題なく保存できます –

関連する問題