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);
}
Copyright © 1997, 2004, Oracle. All rights reserved.