0

私は Objectify を初めて使用し、1 対多の関係を実装しようとしています。エンティティOrganizationとエンティティPersonがあります。組織には@TransientプロパティList< Person > contactPeopleがあります。クラス Person には@ParentプロパティKey< Organization > organizationKeyがあり、セッターを介して設定できます。

Organization のハンドラでcontactPeopleを保持したいと思います。@PrePersistそのためには、Person に親キーを設定する必要があります。

Wikiには次のように書かれています。 「@PrePersist コールバックで @Id または @Parent フィールドを更新することはできません。この時点までに、低レベルのエンティティは完全なキーで構築されているため、オプションのパラメータとして渡すことができます。 "

これはまだ正確な情報かどうかわかりません。com.google.appengine.api.datastore.Entityハンドラーで取得したオブジェクトのキーにはPrePersist、文字通り「no-id-yet」というキーがあるためです。

これをどのように実装しますか?

ありがとうございました!

2011 年 11 月 17 日の更新:

新しい Objectify4 では、次のような半自動の関係を作成できます。

class Beastie {
   @Parent
   @Load
   ParentThing parent;

   @Id Long id;

   @Load({"bigGroup", "smallGroup"})
   SomeThing some;

   @Load("bigGroup")
   List<OtherThing> others;

   @Load
   Ref<OtherThing> refToOtherThing;

   Ref<OtherThing> anotherRef;  // this one is never fetched automatically
}

新しいバージョンの進化する設計ドキュメントです。

これは大きなニュースです。Twigの作者である John Patterson は、本日 Objectify プロジェクトに参加しました。

4

1 に答える 1

1

うーん、データ モデルの前に Dao を作成する必要があるようです。したがって、次のようなことができます。

Organization organization = ...
List<Person> people = ...
ob.put(organization)
for (Person person: people) {
    person.organizationKey = organization.getKey();
    ob.put(person);
    organization.contactPeopleKeys.add(person.getKey());
}
ob.put(organization)

GAE+Objectifyは自作コードで処理するものが多いのでよくあること

于 2011-10-20T06:11:13.143 に答える