ヘッダーをスキップ

リレーションシップ問合せキーの使用

TopLinkではリレーションシップ・マッピングに対する問合せキーがサポートされ、すべてのリレーションシップ・マッピングについて自動的に問合せキーが定義されます。関連上で結合する際にこれらのキーを使用できます。1対1問合せキーは関連の結合を定義し、get()メソッドを介してアクセスされます。

1対多問合せキーおよび多対多問合せキーはコレクション関連上の個別結合を定義し、式のanyOf()メソッドを介してアクセスされます。mappingが関連について存在しない場合は、リレーションシップ問合せキーを手動で定義することもできます。問合せキーで定義される関連はデータレベルの式です。

例4-4 1対1問合せキー

次のコード例は、TopLink式フレームワーク内における1対1問合せキーの使用を示しています。

ExpressionBuilder employee = new ExpressionBuilder();
Vector employees = session.readAllObjects(Employee.class, employee.get("address").get("city").equal("Ottawa"));

ディスクリプタの修正によるリレーションシップ問合せキーの定義

リレーションシップ問合せキーはTopLinkマッピング・エディタでは直接サポートされていません。リレーションシップ問合せキーを定義するには、修正メソッドを指定して記述する必要があります。addQueryKey()メッセージを送信して問合せキーを登録します。

例4-5 1対1問合せキーの定義例

次のコード例は、1対1問合せキーの定義方法を示しています。

// Static amendment method in Address class, addresses do not know their owners in the object-model, however you can still query on their owner if a user-defined query key is defined
public static void addToDescriptor(Descriptor descriptor)
{
OneToOneQueryKey ownerQueryKey = new OneToOneQueryKey();
ownerQueryKey.setName("owner");
ownerQueryKey.setReferenceClass(Employee.class);
ExpressionBuilder builder = new ExpressionBuilder();
ownerQueryKey.setJoinCriteria(builder.getField("EMPLOYEE.ADDRESS_ID").equal(builder.getParameter("ADDRESS.ADDRESS_ID")));
descriptor.addQueryKey(ownerQueryKey);
}


関連トピック

TopLinkディスクリプタについて

問合せキーの自動生成
インタフェース・ディスクリプタでの問合せキーの使用

問合せキーの使用
問合せキーの指定
ディスクリプタの使用