| Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.1.2) E48005-01 |
|
![]() 前 |
![]() 次 |
@BatchFetchを使用して、単一の問合せで読み取られる関連マッピング(@OneToOne、@OneToMany、@ManyToMany、@ElementCollectionなど)に関連するオブジェクトを読み取ります。
注釈要素
表2-3は、この注釈の要素を示しています。
表2-3 @BatchFetchの注釈要素
| 注釈要素 | 説明 | デフォルト |
|---|---|---|
|
size |
バッチ・フェッチのデフォルトのサイズ。 |
|
|
BatchFetchType |
(オプション)使用するバッチ・フェッチのタイプは、次のとおりです。
|
|
使用方法
バッチ・フェッチにより、ツリーの最適なロードが可能になります。@BatchFetch注釈をツリー構造の子関係で設定すると、EclipseLinkは、各レベルに対して1つのSQL文を使用します。たとえば、PHONEにEMPLOYEEに対する外部キーがあるEMPLOYEE表およびPHONE表を使用してオブジェクトについて考えます。デフォルトでは、従業員のアドレス・リストを読み取るには、従業員のアドレスごとの、n回の問合せが必要になります。バッチ・フェッチでは、すべてのアドレスに対して1つの問合せを使用します。
BatchFetchType=EXISTSの使用にはSQL DISTINCT文(LOBに関する問題が発生する可能性があります)が必要ないため、一部のタイプの問合せや、特定のデータベースでは、より効率的である場合があります。
BatchFetchType=INを使用すると、EclipseLinkでは、まだキャッシュにないオブジェクトのみを選択します。この方法は、カーソルやページ区切りに対して、またはJOINを使用できない状況において、より役立つ場合があります。一部のデータベースでは、シングルトンIDに対してのみ機能します。
例
次の例では、様々なバッチ・フェッチ・タイプとともにこの注釈(およびXML)を使用する方法を示します。
例2-7 JOIN BatchFetchタイプの使用
@OneToOne @BatchFetch(BatchFetchType.JOIN) private Address address;
<one-to-one name="address">
<batch-fetch type="JOIN" />
</one-to-one>
例2-8 EXISTS BatchFetchタイプの使用
@BatchFetch(BatchFetchType.EXISTS)
@OneToOne
public Map<String, String> getStringMap() {
return stringMap;
}
<one-to-one name="StringMap">
<batch-fetch type="EXISTS"/>
</one-to-one>
例2-9 IN BatchFetchタイプの使用
@BatchFetch(BatchFetchType.IN, size=50)
@OneToOne
public Map<String, String> getStringMap() {
return stringMap;
}
<one-to-one name="StringMap">
<batch-fetch type="IN" size="50" />
</one-to-one>
関連項目
詳細は、次を参照してください。
『Oracle TopLinkの理解』
『Oracle TopLinkソリューション・ガイド』