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ソリューション・ガイド』