Oracle® Fusion Middleware Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス 12c (12.2.1.2.0) E82670-01 |
|
![]() 前 |
![]() 次 |
この章では、EcpliseLink問合せヒント(JPA問合せの拡張機能)の指定方法を説明します。次を使用して、EclipseLink問合せヒント(JPA問合せの拡張機能)を指定できます。
@QueryHint
注釈の使用
orm.xml
またはeclipselink-orm.xml
ファイルへのヒントの組込み
名前付き問合せや動的問合せ(JPQLまたは基準)の実行時におけるsetHint()
メソッドの使用
EclipseLinkでは、次のEclipseLink問合せヒントがサポートされています。
refresh、
<
すべてのEclipseLink問合せヒントは、org.eclipse.persistence.config package
内のQueryHints
クラスに定義されています。ヒントを設定する場合は、org.eclipse.persistence.config
パッケージ内の適切な構成クラスでpublic static finalフィールドを使用して、次のような値を設定できます。
HintValues
CacheUsage
PessimisticLock
QueryType
詳細は、次を参照してください。
EclipseLinkの理解の問合せヒントに関する項
EclipseLinkソリューション・ガイドの問合せに関する項
JPA仕様(http://jcp.org/en/jsr/detail?id=317
)の10.3.1項、NamedQuery注釈に関する項
eclipselink.batch
を使用してEclipseLinkにバッチ処理情報を提供すると、関連するオブジェクトに対する後続の問合せがバッチ内で最適化されるため、オブジェクトを1つずつ取得したり、大規模な1つの結合読取りで取得することを回避できます。
使用方法
eclipselink.batch
ヒントを使用すると、EclipseLinkで重複データの読取りが回避されるため、結合よりも効率的です。
SELECT句にオブジェクトが1つしかない問合せについてのみ、バッチ処理を実行できます
有効値は、単一値のリレーションシップ・パス式です。
注意: ネストされた属性にアクセスするには、ドット表記法を使用します。たとえば、従業員のマネージャのアドレスについてバッチ読取りを実行するには、e.manager.address を使用します。 |
batch.type
がIN
に設定されている場合、eclipselink.batch.size
を使用して、バッチ・サイズを構成します。
eclipselink.batch.type
を使用して、バッチ・フェッチの対象となるすべてのリレーションシップについて問合せで使用するバッチ・フェッチのタイプを指定します。
eclipselink.cache-usage
を使用して、問合せとEclipseLinkキャッシュとの相互作用の方法を指定します。
値
表4-3は、この問合せヒントの有効値を説明しています。
表4-3 org.eclipse.persistence.config.CacheUsageの有効値
Value | 説明 |
---|---|
|
常にデータベースに移動します。 |
|
読取り問合せに主キーのみを比較する式が含まれている場合、メモリー内のオブジェクトに対して式を処理すると、キャッシュ・ヒットを取得できます。 |
|
読取り問合せに少なくとも主キーを比較する式が含まれている場合、メモリー内のオブジェクトに対して式を処理すると、キャッシュ・ヒットを取得できます。 |
|
任意の読取り問合せを構成し、データベースにアクセスする前にキャッシュを完全にチェックできます。 |
|
任意のすべて読取り問合せを構成し、親セッション・キャッシュ(共有キャッシュ)のみをチェックして、データベースにアクセスせずにその問合せからの結果を返すことができます。 |
|
任意の読取り問合せまたはすべて読取り問合せを作業ユニットのコンテキスト内で構成し、作業ユニット内でオブジェクトに加えられた変更に結果を一致させることができます。これには、新規オブジェクト、削除されたオブジェクト、および変更されたオブジェクトが含まれます。 |
|
(デフォルト)このエンティティにEclipseLinkディスクリプタAPIで指定されたキャッシュ構成を使用します。 注意: エンティティのデフォルト値では、キャッシュはチェックされません( |
使用方法
EclipseLink JPAでは、永続性ユニット全体からアクセスされる共有キャッシュを使用します。特定の永続性コンテキストで操作を完了すると、EclipseLinkにより結果が共有キャッシュにマージされ、これにより、エンティティ・マネージャおよび永続性コンテキストがJava SEまたはJava EEで作成されたものであるかどうかにかかわらず、他の永続性コンテキストで結果を使用できるようになります。
エンティティ・マネージャを使用して永続化または削除されたすべてのエンティティは、常に、一貫してキャッシュで保持されます。
例
例4-7に、JPA問合せでこのヒントを使用する方法を示します。
例4-7 JPA問合せでのcache-usageの使用
import org.eclipse.persistence.config.CacheUsage; import org.eclipse.persistence.config.QueryHints; query.setHint(QueryHints.CACHE_USAGE, CacheUsage.CheckCacheOnly);
例4-8に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.cache-usage.indirection-policy
を(cache-usageとともに)使用して、インメモリー問合せおよびインスタンス化されていないインダイレクションや遅延リレーションシップに関する一致機能の処理を構成します。
値
表4-4は、この問合せヒントの値を説明しています。
表4-4 cache-usage.indirection-policyの有効値
Value | 説明 |
---|---|
|
一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致処理を行うことが想定されます。 |
|
(デフォルト)一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、例外がスローされます。 |
|
一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致処理を行わないことが想定されます。 |
|
一致機能でインスタンス化されていないインダイレクションや遅延オブジェクトが発生した場合、一致機能がトリガーされます。 |
例
例4-9に、JPA問合せでこのヒントを使用する方法を示します。
例4-9 JPA問合せでのcache-usage.indirection-policyの使用
query.setHint(QueryHints.INDIRECTION_POLICY, CacheUsageIndirectionPolicy.Trigger);
例4-10に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.cursor
を使用して、CursoredStream
を返すように問合せを構成します。
使用方法
カーソルは、JDBC ResultSet
のストリームです。カーソルは、結果セットが大きい場合や問合せのうち少数の結果のみが必要な場合に役立ちます。
各next()
を使用してJDBC ResultSet
から次をフェッチする場合、カーソルでEnumeration
を実装して、それによって生成されるオブジェクトや値を構築します。カーソルにはJDBCライブ接続が必要であるため、この接続は保持されます。カーソルのリソースを解放するには、close()
を使用する必要があります。
カーソルにアクセスするには、JPA問合せからgetSingleResult()
を使用するか、またはJpaQuery
からgetResultCursor()
を使用します。
ヒント: 結果のページを取得するには、カーソルのかわりにMAX_ROWS およびFIRST_RESULT を使用できます。 |
ecliplselink.composite-unit.member問合せヒントを使用して、問合せの実行対象であるコンポジット・メンバー永続性ユニットの名前を指定します。コンポジット永続性ユニットで実行されるネイティブ問合せに対して使用する必要があります。
eclipselink.cursor.initial-size
を使用して、指定した初期サイズでCursoredStreamを返すように問合せを構成します。
eclipselink.cursor.page-size
を使用して、指定したページ・サイズでCursoredStream
を返すように問合せを構成します。
eclipselink.exclusive-connection
を使用して、問合せで排他(トランザクション/書込み)接続を使用するかどうかを指定します。
使用方法
これは、EXCLUSIVE_CONNECTION_MODE
プロパティが永続性ユニット(VPDなど)に設定されている場合にのみ有効です。jdbc.exclusive-connection.mode
が構成されている場合、この問合せヒントを使用して、問合せが排他接続によって実行されるようにします。
これは、データベース・セキュリティが原因で、セキュアな表に結合する問合せを共有接続を介して実行したときに正しい結果が返されない場合など、特定のケースで必要となることがあります。
eclipselink.flush
を使用して、問合せの実行前に、問合せで永続性コンテキストをフラッシュするかどうかを指定します。
使用方法
永続性コンテキスト内で変更されたオブジェクトに問合せがアクセスする可能性がある場合、問合せで変更が認識されるようにフラッシュをトリガーする必要があります。問合せで変更を認識する必要がない場合は、パフォーマンスを向上させるためにフラッシュを回避する必要があります。
フラッシュ・モードを永続性ユニット・プロパティとして構成することもできます。詳細は、「flush-clear.cache」を参照してください。
問合せ変更について一致機能を使用することもでき、この場合、フラッシュを実行する必要はありません。詳細は、「cache-usage」を参照してください。
例
例4-21に、JPA問合せでこのヒントを使用する方法を示します。
例4-21 JPA問合せでのflushの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.FLUSH", "TRUE");
例4-22に、@QueryHint
注釈でこのヒントを使用する方法を示します。
ある時点におけるオブジェクトの状態を問い合せるように、問合せを構成します。
使用方法
問合せの実行と結果はともに、データベースSCNを基準にして存在したデータベースに従います。
注意: この問合せヒントまたはOracle Flashbackを使用する際には、履歴サポートを含むクラスが必要となります。 |
例
例4-23に、JPA問合せでこのヒントを使用する方法を示します。
例4-23 JPA問合せでのhistory.as-ofの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.AS_OF", "2012/10/15 11:21:18.2");
例4-24に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.history.as-of.scn
を使用して、データベースSCN (システム変更番号)時点でのオブジェクトの状態を問い合せるように問合せを構成します。
例
例4-25に、JPA問合せでこのヒントを使用する方法を示します。
例4-25 JPA問合せでのhistory.as-of.scnの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.AS_OF_SCN", "3");
例4-26に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.inheritance.outer-join
を使用して、すべてのサブクラスにouter-joinを使用するように問合せを構成します。
使用方法
この問合せヒントは、ルートまたはブランチの継承クラスについての問合せで使用できます。
DescriptorCustomizer
(「descriptor.customizer」を参照)を使用して、この動作を構成することもできます。
注意: これは、正しい順序付け、firstResult 、maxResult およびカーソルに必要です。 |
eclipselink.jdbc.bind-parameters
を使用して、問合せでパラメータ・バインド(パラメータ化されたSQL)を使用するかどうかを指定します。
使用方法
デフォルトでは、EclipseLinkでのパラメータ・バインドおよび文のキャッシュは有効化されています。そうすることで、EclipseLinkではプリコンパイルされたSQL文を使用し、すべてのSQLパラメータをバインドして、プリコンパイルされたSQL文をキャッシュします。この問合せを再実行するときにはSQLのプリコンパイルが不要になるため、パフォーマンスが向上します。
persistence.xml
ファイルで、永続性ユニットのパラメータ・バインドを構成することもできます(Java SE環境で使用する場合)。
例
例4-29に、JPA問合せでこのヒントを使用する方法を示します。
例4-29 JPA問合せでのbind-parametersの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint(QueryHints.BIND_PARAMETERS, HintValues.TRUE);
例4-30に、@QueryHint
注釈でこのヒントを使用する方法を示します。
例4-30 @QueryHint注釈でのbind-parametersの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.TargetDatabase; @QueryHint(name=QueryHints.BIND_PARAMETERS, value=HintValues.TRUE);
例4-31に、永続性ユニットpersistence.xml
ファイルでパラメータ・バインドを構成する方法を示します。
問合せによりそのJDBC文をキャッシュするかどうかを指定します。
使用方法
これにより、問合せでパラメータ化されたSQLを文キャッシュとともに使用できます。また、文キャッシュが永続性ユニットについて有効になっている場合、特定の問合せでその文をキャッシュしないようにすることもできます。
ヒント: 通常、問合せごとではなく、永続性ユニット全体について文キャッシュを設定する必要があります(「jdbc.cache-statements」を参照)
|
追加行が必要な場合に、eclipselink.jdbc.fetch-size
を使用して、データベースからフェッチする行数を指定します。
注意: このプロパティにはJDBCドライバのサポートが必要です。 |
使用方法
多数のオブジェクトを返す問合せに対しては、問合せで使用される行フェッチ・サイズを構成すると、選択条件を満たすのに必要なデータベース・ヒット数が少なくて済み、パフォーマンスが向上します。
デフォルトで、ほとんどのJDBCドライバのフェッチ・サイズは10であるため、1000個のオブジェクトを読み取る場合、フェッチ・サイズを256に増やすと、問合せ結果のフェッチに要する時間が大幅に短縮される場合があります。最適なフェッチ・サイズが常に明白であるとはかぎりません。通常は、予想される総結果サイズの半分または4分の1がフェッチ・サイズとして最適です。
結果セットのサイズが不確かな場合に、誤ってフェッチ・サイズの設定を大きく、または小さくしすぎると、パフォーマンスが低下する可能性があります。
eclipselink.jdbc.max-rows
を使用して、返される最大行数を指定します。問合せにより、指定された数より多くの行が返された場合、後続行は返されません。
eclipselink.jdbc.native-connection
を使用して、問合せにネイティブJDBC接続が必要がどうかを指定します。
使用方法
これは、独自のプロキシにJDBC接続をラップするDataSource
が実装されたサーバー・プラットフォームでの問合せに必要となる場合があります。問合せにカスタムJDBCアクセスが必要な場合、ネイティブ接続が必要となる可能性があります。
ネイティブ接続を使用できるようにするには、ServerPlatform
を永続性プロパティとして設定する必要があります。ネイティブ接続が必要であるとEclipseLinkですでに認識されている機能については、eclipselink.jdbc.native-connectionがデフォルトでtrue
に設定されます。
eclipselink.jdbc.parameter-delimiter
を使用して、(デフォルトのハッシュ文字#のかわりに)カスタム・パラメータのバインディング文字を指定します。
eclipselink.jdbc.timeout
を使用して、DatabaseExcpetion
をスローする前に、EclipseLinkで問合せ結果を待機する(タイムアウトする)秒数を指定します。
注意: このプロパティにはJDBCドライバのサポートが必要です。 |
例
例4-42に、JPA問合せでこのヒントを使用する方法を示します。
例4-42 JPA問合せでのjdbc.timeoutの使用
import org.eclipse.persistence.config.CacheUsage;
import org.eclipse.persistence.config.QueryHints;
query.setHint(QueryHints.JDBC_TIMEOUT, "100");
例4-43に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.join-fetch hint
を使用して、属性を問合せに結合します。
注意: ネストされた属性にアクセスするには、ドット表記法を使用します。たとえば、従業員のマネージャのアドレスについてバッチ読取りを実行するには、e.manager.address を使用します。 |
使用方法
このヒントはeclipselink.batch
に類似しています。関連オブジェクトの後続問合せを1つの大規模な結合読取りで取得するかわりに、バッチで最適化できます。
eclipselink.join-fetch
ヒントは、マルチレベルのフェッチ結合が可能であるという点で、JPQL結合とは異なります。
例
例4-44に、JPA問合せでこのヒントを使用する方法を示します。
例4-44 JPA問合せでのjoin-fetchの使用
import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.join-fetch", "e.address");
例4-45に、@QueryHint
注釈でこのヒントを使用する方法を示します。
関連項目
詳細は、次を参照してください。
EclipseLinkの理解の問合せの最適化に関する項
JPA仕様(http://jcp.org/en/jsr/detail?id=317
)のフェッチ結合に関する項
EclipseLinkソリューション・ガイドのパフォーマンスの拡張に関する項
eclipselink.left-join-fetch
を使用して問合せを最適化することにより、関連オブジェクトは個別に問合せが行われるのではなく、問合せに結合されます。
使用方法
この問合せヒントを使用して、JPQLでサポートされていないネストされた結合フェッチを作成できます。また、eclipselink.left-join-fetch
を使用して、ネイティブ問合せを含む結合フェッチを作成することもできます。
注意: この問合せヒントでは、nullまたは空の値を使用できるOUTER 結合を使用します。 |
例
例4-46に、JPA問合せでこのヒントを使用する方法を示します。
例4-46 JPA問合せでのleft-join-fetchの使用
import org.eclipse.persistence.config.HintValues;
import org.eclipse.persistence.config.QueryHints;
query.setHint("eclipselink.LEFT_FETCH", "STRING");
例4-47に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.load-group
を使用して、ロード・グループ・オブジェクトを使用するように問合せを構成します。
使用方法
ロード・グループを使用すると、EclipseLinkにより、グループのすべてのリレーショナル属性が確実にロードされます。LoadGroupsは、オブジェクトを返す問合せについてのみサポートされます(1つの別名のみをSELECT句にすることができます)。
例
例4-48に、JPA問合せでこのヒントを使用する方法を示します。
例4-48 JPA問合せでのload-groupの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.LOAD_GROUP", MyLoadGroup);
例4-49に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.load-group.attribute
を使用して、問合せで属性のリストを含むload-groupを使用するかどうかを指定します。
eclipselink.maintain-cache
を使用して、問合せ結果をセッション・キャッシュでキャッシュするかどうかを制御します。
使用方法
eclipselink.maintain-cache
ヒントでは、現行の永続性コンテキストに影響を及ぼすことなく、現行のデータベースの内容を問い合せる方法が提供されています。これにより、管理対象外のインスタンスを返すように問合せが構成されるため、このヒントを使用して問合せが行われるエンティティへのすべての更新を永続性コンテキストにマージする必要があります。
eclipselink.pessimistic-lock
を使用して、EclipseLinkでペシミスティック・ロックを使用するかどうかを指定します。
使用方法
ペシミスティック・ロックを使用する主な利点は、ロックが取得されると、編集が正常に行われることが保証される点です。これは、オプティミスティック・ロックが原因で多数のオプティミスティック・ロック・エラーが発生する可能性がある高並列アプリケーションにおいて有用です。
ペシミスティック・ロックの短所の1つは、このロックでは追加のデータベース・リソースが必要となるため、編集中にデータベースのトランザクションと接続を保持する必要があるという点です。また、ペシミスティック・ロックがデッドロックの原因となり、同時実行性の問題が発生する場合もあります。
eclipselink.prepare
を使用して、問合せを実行するたびにそのSQLを準備(つまり生成)するかどうかを指定します。
使用方法
デフォルトでは、EclipseLinkにより実行ごとにSQLが再生成されることはありません。このため、パフォーマンスが向上する場合があります。
動的SQLを必要とする問合せでは(null
パラメータを処理する場合など)、eclipselink.prepare
をfalseに設定します。
eclipselink.query-results-cache
を使用して、問合せで結果キャッシュを使用することを指定します。
使用方法
デフォルトでは、問合せにより100個の問合せ結果がキャッシュされますが(「query-results-cache.size」を参照)、同じ引数を含む同じ名前付き問合せが再実行される場合、EclipseLinkはデータベースをスキップしてキャッシュ結果を返します。
注意: 問合せキャッシュは、オブジェクト・キャッシュに依存しない異なるキャッシュです。 |
例
例4-56に、JPA問合せでこのヒントを使用する方法を示します。
例4-56 JPA問合せでのquery-results-cacheの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.QUERY_RESULTS_CACHE", "TRUE");
例4-57に、@QueryHint
注釈でこのヒントを使用する方法を示します。
例4-57 @QueryHint注釈でのquery-results-cacheの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; @QueryHint(name=QueryHints.QUERY_RESULTS_CACHE, value="TRUE");
例4-58に、orm.xml
ファイルでこのヒントを使用する方法を示します。
例4-58 orm.xmlファイルでのquery-results-cacheの使用
<?xml version="1.0"?>
<entity-mappings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.eclipse.org/eclipselink/xsds/persistence/orm http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"
version="2.4">
<entity name="Employee" class="org.acme.Employee" access="FIELD">
<named-query name="findAllEmployeesInCity" query="Select e from Employee e where e.address.city = :city">
<hint name="eclipselink.query-results-cache" value="true"/>
<hint name="eclipselink.query-results-cache.size" value="500"/>
</named-query>
...
</entity>
</entity-mappings>
eclipselink.query-results-cache.expiry
を使用して、問合せの結果キャッシュの有効時間(つまり、有効期限)を設定します。
eclipselink.query-results-cache.expiry-time-of-day
を使用して、問合せ結果キャッシュの有効期限の時刻を設定します。
例
例4-61に、JPA問合せでこのヒントを使用する方法を示します。
例4-61 JPA問合せでのquery-results-cache.expiry-time-of-dayの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.QUERY_RESULTS_CACHE_EXPIRY_TIME_OF_DAY", "11:15:34");
例4-62に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.query-results-cache.ignore-nullを使用して、EclipseLinkがnull
の問合せ結果をキャッシュするかどうかを指定します。
eclipselink.query-results-cache.randomize-expiry
を使用して、有効期間(query-results-cache.expiry)の設定値の10%をランダム化することを指定します。
例
例4-65に、JPA問合せでこのヒントを使用する方法を示します。
例4-65 JPA問合せでのquery-results-cache.randomize-expiryの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.QUERY_RESULTS_CACHE_RANDOMIZE_EXPIRY", "TRUE");
例4-66に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.query-results-cache.size
を使用して、問合せの結果キャッシュの固定サイズを設定します。
使用方法
query-results-cacheを使用する場合、同じ引数を含む同じ名前付き問合せが再実行されると、EclipseLinkはデータベースをスキップしてキャッシュ結果を返します。
注意: 問合せに引数が含まれていない場合、(結果が1つのみのため)サイズ1が使用されます。 |
eclipselink.query-results-cache.type
を使用して、問合せの結果キャッシュに使用するキャッシュ・タイプを設定します。
値
表4-34は、この問合せヒントの値を説明しています。
表4-34 query-results-cache.typeの有効値
Value | 説明 |
---|---|
Cache |
(デフォルト)固定サイズのLRUキャッシュ( |
Full |
完全なキャッシュと保証されたアイデンティティを提供します。 |
Hard_Weak |
サブキャッシュでハード参照を使用すること以外は、SOFT_WEAKと類似しています。 |
なし |
キャッシュされません。 |
Soft |
ソフト参照を使用してマップがオブジェクトを保持すること以外は、FULLに類似しています。 |
Soft_Weak |
最も使用頻度の高いサブキャッシュを保持すること以外は、WEAKに類似しています。 |
Weak |
弱参照を使用してマップがオブジェクトを保持すること以外は、FULLに類似しています。 |
例
例4-69に、JPA問合せでこのヒントを使用する方法を示します。
例4-69 JPA問合せでのquery-results-cache.typeの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.QUERY_RESULTS_CACHE_TYPE", "FULL");
例4-70に、@QueryHint
注釈でこのヒントを使用する方法を示します。
eclipselink.query-type
を使用して、問合せに使用するEclipseLink問合せタイプを指定します。
使用方法
EclipseLinkでは、ほとんどのJPQL問合せについて、デフォルトでorg.eclipse.persistence.queries.ReportQuery
またはorg.eclipse.persistence.queries.ReadAllQuery
が使用されます。eclipselink.query-type
ヒントを使用すると、単一オブジェクトを返す問合せに、org.eclipse.persistence.queries.ReadObjectQuery
などの別の問合せタイプを指定できます。
eclipselink.read-only
を使用して、問合せから読取り専用結果を取得します。
使用方法
非トランザクションの読取り操作では、要求されたエンティティ・タイプが共有キャッシュに格納される場合、デタッチされたコピーではなく、共有インスタンスが返されるように要求できます。
注意: 共有キャッシュから返されるオブジェクトを変更しないでください。 |
eclipselink.refresh
を使用して、問合せにより返されたオブジェクトでEclipseLinkのセッション・キャッシュを更新するかどうかを指定します。
使用方法
eclipselink.refresh
問合せヒントは、キャッシュおよび永続性コンテキスト内に生成されているオブジェクトが問合せによってデータベースの現在の状態でリフレッシュされるように構成します。また、フラッシュが行われていない場合は、共有キャッシュ内のオブジェクトもリフレッシュされます。この問合せの実行前にフラッシュがトリガーされない場合、オブジェクトに行われたフラッシュされていない変更は失われます)。リフレッシュは、REFRESH_CASCADE
ヒントの値に基づいてリレーションシップにカスケードされます。
eclipselink.refresh.cascade
を使用して、リフレッシュ問合せにより、リフレッシュをリレーションシップにカスケードするかどうかを指定します。
eclipselink.result-collection-type
を使用して、問合せ結果にコレクション・クラス実装を構成します。
使用方法
List
ではないCollection
型を使用する場合、getResultList()
のかわりに、getResultCollection()
またはgetSingleResult()
を使用する必要があります。
eclipselink.sql.hint
を使用して、問合せのSQLにSQLヒントを組み込みます。
使用方法
特定のデータベース・プラットフォームでSQLヒントを使用して、問合せでの索引の使用方法や、使用頻度の低いその他の使用方法を定義できます。SQLヒントは、SQL内のSELECT
/INSERT
/UPDATE
/DELETE
コマンドの後に組み込みます。
例
例4-81に、JPA問合せでこのヒントを使用する方法を示します。
例4-81 JPA問合せでのsql.hintの使用
import org.eclipse.persistence.config.HintValues; import org.eclipse.persistence.config.QueryHints; query.setHint("eclipselink.HINT", "/*+ index(scott.emp ix_emp) * /");
例4-82に、@QueryHint
注釈でこのヒントを使用する方法を示します。
関連項目
詳細は、次を参照してください。
EclipseLinkの理解の問合せヒントに関する項
EclipseLinkソリューション・ガイドの問合せに関する項
JPA仕様(http://jcp.org/en/jsr/detail?id=317
)の10.3.1項、NamedQuery注釈に関する項