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

2010年5月12日水曜日

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

あるクラスの 1 つのオブジェクトから別のクラスの複数のオブジェクトへの 1 対多の関係を作成するには、関係クラスのコレクションを使用します。

Employee.java
import java.util.List;
// ...
    @Persistent
    private List<ContactInfo> contactInfoSets;

双方向の 1 対多関係は、親クラスのフィールドがアノテーション @Persistent(mappedBy = "...") を使用し、その値が子クラスのフィールド名であるという点では 1 対 1 関係に似ています。

Employee.java
import java.util.List;
// ...
    @Persistent(mappedBy = "employee")
    private List<ContactInfo> contactInfoSets;

ContactInfo.java
import Employee;
// ...
    @Persistent
    private Employee employee;

コレクション タイプの一覧は、1 対多関係でサポートされていますが、1 対多関係では配列はサポートしていません。

App Engine はクエリの結合はサポートしていないため、子エンティティの属性を使用し、親エンティティへのクエリを実行することはできません。(組み込みクラスには親エンティティのプロパティが格納されているため、組み込みクラスのプロパティへのクエリは実行できます

順序付けられたコレクションが順序を保持する方法
List<...> などの順序付けられたコレクションは、親オブジェクトが保存されるとオブジェクトの順序を保持します。JDO は、各オブジェクトの位置をオブジェクトのプロパティとして格納することで、データベースでこの順序を保持します。App Engine は、親のフィールド名に _INTEGER_IDX をつなげたものをプロパティ名として、対応するエンティティのプロパティとしてこれを保存します。位置のプロパティは効率的ではありません。コレクションで要素が追加、削除、移動された場合、コレクション内の変更箇所に従うすべてのエンティティも更新する必要があります。この処理は時間がかかり、トランザクションで実行されない場合はエラーが発生することがあります。

コレクションの任意の順序を保持する必要はないものの、順序付けられたコレクション タイプを使用しなければならない場合、DataNucleus が提供する JDO への拡張であるアノテーションを使用し、要素のプロパティに基づいて順序を指定できます。

import java.util.List;
import javax.jdo.annotations.Extension;
import javax.jdo.annotations.Order;
import javax.jdo.annotations.Persistent;

// ...
    @Persistent
    @Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="state asc, city asc"))
    private List<ContactInfo> contactInfoSets = new List<ContactInfo>();

@Order アノテーション(list-ordering 拡張を使用)は JDOQL の順序句としてコレクションの要素の順序を指定します。順序は要素のプロパティの値を使用します。クエリに関しては、コレクションのすべての要素には、順序句で指定したプロパティの値が含まれている必要があります。

コレクションにアクセスすると、クエリが実行されます。フィールドの順序句で 1 つ以上の並び替え順序が使用されている場合、クエリを実行するにはデータストア インデックスが必要です。

効率的に実行するには、順序付けされた 1 対多関係では、できる限り順序句を明示的に使用してください。

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

0 件のコメント:

コメントを投稿

ホームページ