ヘッダーをスキップ
Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス
12c (12.1.2)
E48005-01
  目次へ移動
目次

前
 
次
 

@BatchFetch

@BatchFetchを使用して、単一の問合せで読み取られる関連マッピング(@OneToOne@OneToMany@ManyToMany@ElementCollectionなど)に関連するオブジェクトを読み取ります。

注釈要素

表2-3は、この注釈の要素を示しています。

表2-3 @BatchFetchの注釈要素

注釈要素 説明 デフォルト

size

バッチ・フェッチのデフォルトのサイズ。BatchFetchType=INが各IN句のキーの数を定義する場合にのみ使用されます。

256または問合せのpageSize (カーソル問合せの場合)

BatchFetchType

(オプション)使用するバッチ・フェッチのタイプは、次のとおりです。

  • JOIN: 元の問合せの選択基準は、バッチ問合せと結合されます。

  • EXISTS: バッチ問合せでJOINではなくSQL EXISTS句と下位選択を使用します。

  • IN: バッチ問合せでSQL IN句を使用し、ソース・オブジェクトIDを渡します。

JOIN


使用方法

バッチ・フェッチにより、ツリーの最適なロードが可能になります。@BatchFetch注釈をツリー構造の関係で設定すると、EclipseLinkは、各レベルに対して1つのSQL文を使用します。たとえば、PHONEEMPLOYEEに対する外部キーがある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>

関連項目

詳細は、次を参照してください。