自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2010年5月12日水曜日

JDO-関係-1 対 1 の所有関係

2 つの永続オブジェクト間に一方向の 1 対 1 の所有関係を設定するには、関連付けられるクラスのクラスをタイプとして持つフィールドを使用します。

次に、ContactInfo データ クラスと Employee データ クラスで、Employee から ContactInfo への 1 対 1 の関係を定義する方法を示します。

ContactInfo.java
import com.google.appengine.api.datastore.Key;
// ... imports ...
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class ContactInfo {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    @Persistent
    private String streetAddress;
    // ...
}

Employee.java
import ContactInfo;
// ... imports ...
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
    @Persistent
    private ContactInfo contactInfo;
    ContactInfo getContactInfo() {
        return contactInfo;
    }
    void setContactInfo(ContactInfo contactInfo) {
        this.contactInfo = contactInfo;
    }
    // ...
}

永続オブジェクトは、データストア内の異なる 2 つの種類の別個のエンティティです。関係は、エンティティ グループ関係を使用して表されます。つまり、子のキーはエンティティ グループの親として親のキーを使用します。アプリケーションが親オブジェクトのフィールドを使用して子オブジェクトにアクセスすると、JDO 実装がエンティティ グループの親へのクエリを実行して子を取得します。

子のクラスには、親キーの情報を保存できるタイプのキー フィールド(キーや文字列として表されたキー値など)が必要です。

両方のクラスのフィールドを使用し、双方向の 1 対 1 関係を作成できます。子クラスのフィールドのアノテーションで、このフィールドが双方向の関係を示していることを宣言します。子クラスのフィールドには、@Persistentアノテーションと引数mappedBy = "..."を指定する必要があります。値は、親クラスのフィールド名となります。1 つのオブジェクトのフィールドに値が設定されると、もう一方のオブジェクトの対応する参照フィールドも自動的に値が設定されます。

ContactInfo.java
import Employee;
// ...
    @Persistent(mappedBy = "contactInfo")
    private Employee employee;

子オブジェクトは、最初にアクセスされたときにデータストアから読み込まれます。親オブジェクトで子オブジェクトにアクセスしない場合、子オブジェクトのエンティティは読み込まれません(データストア インターフェースは、子オブジェクトの「積極的な」読み込みはサポートしていません。データストアはクエリの結合はサポートしていないため、積極的な読み込みを実装しても、アプリケーションからデータストアへのコール数を減らすことはできません)。

参照元:
http://code.google.com/intl/ja/appengine/docs/java/datastore/relationships.html

0 件のコメント:

コメントを投稿

ホームページ