Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.1.2) E48005-01 |
|
![]() 前 |
![]() 次 |
@FetchGroup
を使用して、必要に応じて属性のグループをオンデマンドでロードします。
これにより、ユーザーがオブジェクトの属性の一部のみを必要とする場合に、そのすべてのデータをロードする無駄を回避できます。属性に対して明示的なアクセス・コールが最初に発生するまで、基礎となるデータソースから属性のデータをロードする必要がなくなることも意味します。
注釈要素
表2-22は、この注釈の要素を示しています。
表2-22 @FetchGroupの注釈要素
注釈要素 | 説明 | デフォルト |
---|---|---|
|
(必須)フェッチする属性のリスト。 |
なし |
|
(必須)フェッチ・グループ名。 |
なし |
|
(オプション)フェッチ・グループで指定されたすべてのリレーションシップ属性をロードする必要があるかどうかを示します。 |
|
使用方法
@FetchGroup
を使用する場合は、ユースケース分析を入念に実行する必要があります。遅延したロードによって得られるメリットは、追加のラウンドトリップによって相殺される場合があります。
EclipseLinkでは、次の2つのレベルのフェッチ・グループがサポートされています。
エンティティまたはMappedSuperclassレベルの事前定義済フェッチ・グループ
問合せレベルの動的(ユースケース)フェッチ・グループ
ウィービングを使用する場合、またはフェッチ・グループを定義する個々のクラスがorg.eclipse.persistence.queries.FetchGroupTracker interface
を明示的に実装する場合にのみ、フェッチ・グループを使用できます。
フェッチ・グループを使用すると、オブジェクトの属性のサブセットを定義したり、フェッチ・グループを問合せに関連付けることができます。問合せを実行すると、EclipseLinkによりフェッチ・グループ内の属性のみが取得されます。除外された属性のいずれかに関するgetメソッドをコールすると、EclipseLinkでは、このサブセットから除外されたすべての属性をフェッチする問合せが自動的に実行されます。
1つのクラスに対して、複数のフェッチ・グループを定義できます。オプションで、その中で最大で1つのフェッチ・グループをデフォルト・フェッチ・グループとして指定できます。フェッチ・グループを指定しないで問合せを実行すると、EclipseLinkでは、その他に問合せが構成されていないかぎり、デフォルト・フェッチ・グループを使用します。
フェッチ・グループを使用する前に、入念にシステム使用の分析を実行することをお薦めします。多くの事例では、フェッチ・グループに含まれない属性をロードするために必要な追加の問合せにより、部分的な属性のロードによって得られるメリットがかなり相殺されているためです。
例
例2-44に、この注釈を使用する方法を示します。
例2-44 Using @FetchGroup注釈の使用
@FetchGroup(name="names", attributes={
@FetchAttribute(name="firstName"),
@FetchAttribute(name="lastName")})
例2-44に、eclipselink-orm.xml
ファイルでこの機能を使用する方法を示します。
例2-45 <fetch-group> XMLの使用
<entity class="model.Employee"> <secondary-table name="SALARY" /> <fetch-group name="names"> <attribute name="firstName" /> <attribute name="lastName" /> </fetch-group> ...
例2-46に示すとおり、名前付きフェッチ・グループを問合せとともに使用することもできます。
例2-46 問合せでの名前付きフェッチ・グループの使用
TypedQuery query = em.createQuery("SELECT e FROM Employee e", Employee.class); query.setHint(QueryHints.FETCH_GROUP_NAME, "names");
関連項目
詳細は、次を参照してください。
『Oracle TopLinkの理解』