インターフェース JpaDialect
- すべてのスーパーインターフェース:
PersistenceExceptionTranslator
- すべての既知の実装クラス:
DefaultJpaDialect、EclipseLinkJpaDialect、HibernateJpaDialect
一般に、このインターフェースを直接実装するのではなく、DefaultJpaDialect から派生させることをお勧めします。これにより、DefaultJpaDialect から共通の動作(現在および将来)を継承し、特定のフックをオーバーライドして、具体的なベンダー固有の動作をプラグインすることができます。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Rod Johnson
- 関連事項:
DefaultJpaDialectJpaTransactionManager.setJpaDialect(org.springframework.orm.jpa.JpaDialect)JpaVendorAdapter.getJpaDialect()AbstractEntityManagerFactoryBean.setJpaDialect(org.springframework.orm.jpa.JpaDialect)AbstractEntityManagerFactoryBean.setJpaVendorAdapter(org.springframework.orm.jpa.JpaVendorAdapter)
メソッドのサマリー
修飾子と型メソッド説明beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) 指定された JPA トランザクションを開始し、指定された Spring トランザクション定義で指定されたセマンティクス(特に、分離レベルとタイムアウト)を適用します。voidcleanupTransaction(ObjectSE transactionData) 指定されたトランザクションデータを介してトランザクションをクリーンアップします。getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) リレーショナルデータベースにアクセスする場合、指定された JPA EntityManager がそで使用する JDBC 接続を取得します。prepareTransaction(EntityManagerEE entityManager, boolean readOnly, StringSE name) 指定されたセマンティクスを適用して、JPA トランザクションを準備します。voidreleaseJdbcConnection(ConnectionHandle conHandle, EntityManagerEE entityManager) 最初にgetJdbcConnectionを介して取得された、指定された JDBC 接続を解放します。インターフェース org.springframework.dao.support.PersistenceExceptionTranslator から継承されたメソッド
translateExceptionIfPossible
メソッドの詳細
beginTransaction
@Nullable ObjectSE beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) throws PersistenceExceptionEE, SQLExceptionSE, TransactionException 特定の Spring トランザクション定義で指定されたセマンティクス(特に、分離レベルとタイムアウト)を適用して、特定の JPA トランザクションを開始します。トランザクションの開始時に JpaTransactionManager によって呼び出されます。実装は、JPA トランザクションオブジェクトを構成してから
beginを呼び出すか、分離レベルなどを取る特別な begin メソッドを呼び出すことができます。実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合、以前のフラッシュモード(および場合によっては他のデータ)を保持するトランザクションデータオブジェクトを返し、
cleanupTransactionでリセットできます。また、トランザクションを開始する前に、基になる JDBC 接続に読み取り専用フラグと分離レベルを適用する場合もあります。実装では、渡された TransactionDefinition によって公開される Spring トランザクション名を使用して、特定のデータアクセスのユースケース(現在のトランザクション名をユースケース識別子として効果的に使用する)に最適化することもできます。
このメソッドは、Spring の
SavepointManagerインターフェースを実装するオブジェクトを返すことにより、永続性プロバイダーによってサポートされている場合、セーブポイント機能を公開することもできます。JpaTransactionManagerは、必要に応じてこの機能を使用します。- パラメーター:
entityManager- JPA トランザクションを開始する EntityManagerdefinition- セマンティクスを定義する Spring トランザクション定義- 戻り値:
- トランザクションデータがある場合、それを保持する任意のオブジェクト(
cleanupTransaction(java.lang.Object)に渡される)。SavepointManagerインターフェースを実装できます。 - 例外:
PersistenceExceptionEE- JPA メソッドによってスローされた場合SQLExceptionSE- JDBC メソッドによってスローされた場合TransactionException- 無効な引数の場合- 関連事項:
prepareTransaction
@Nullable ObjectSE prepareTransaction(EntityManagerEE entityManager, boolean readOnly, @Nullable StringSE name) throws PersistenceExceptionEE 指定されたセマンティクスを適用して、JPA トランザクションを準備します。EntityManager を JTA トランザクションまたはローカルに参加したトランザクションに登録するときに、EntityManagerFactoryUtils によって呼び出されます (たとえば、非同期の EntityManager を同期された EntityManager にアップグレードした後など)。実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合は、
cleanupTransactionでリセットするために、以前のフラッシュモード(およびその他のデータ)を保持するトランザクションデータオブジェクトを返すことができます。実装では、Spring トランザクション名を使用して、特定のデータアクセスのユースケースを最適化することもできます(現在のトランザクション名をユースケース識別子として効果的に使用します)。
- パラメーター:
entityManager- JPA トランザクションを開始する EntityManagerreadOnly- トランザクションが読み取り専用であるかどうかname- トランザクションの名前 (もしあれば)- 戻り値:
- トランザクションデータがある場合、それを保持する任意のオブジェクト (cleanupTransaction に渡される)
- 例外:
PersistenceExceptionEE- JPA メソッドによってスローされた場合- 関連事項:
cleanupTransaction
指定されたトランザクションデータを介してトランザクションをクリーンアップします。トランザクションのクリーンアップ時に JpaTransactionManager および EntityManagerFactoryUtils によって呼び出されます。たとえば、実装では、基になる JDBC 接続の読み取り専用フラグと分離レベルをリセットできます。さらに、公開されたデータアクセスのユースケースをここでリセットできます。
- パラメーター:
transactionData- トランザクションデータを保持する任意のオブジェクト(存在する場合) (beginTransaction または prepareTransaction によって返される)- 関連事項:
getJdbcConnection
@Nullable ConnectionHandle getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) throws PersistenceExceptionEE, SQLExceptionSE リレーショナルデータベースにアクセスする場合、指定された JPA EntityManager がそで使用する JDBC 接続を取得します。このメソッドは、通常はアクティブな JPA トランザクション内で(たとえば、JpaTransactionManager によって)、基になる JDBC 接続へのアクセスが実際に必要な場合に呼び出されます。返されたハンドルは、不要になったときにreleaseJdbcConnectionメソッドに渡されます。JPA は基盤となる JDBC 接続を取得する標準的な方法を提供しないため、この戦略が必要です(JPA 実装がリレーショナルデータベースでまったく機能しない可能性があるため)。
実装では、ラップされていない Connection オブジェクト、つまり、接続プールから取得した Connection を返すことをお勧めします。これにより、アプリケーションコードが、OracleConnection などの基になるネイティブ JDBC 接続に到達しやすくなります。これは、LOB 処理などに必要になる場合があります。コードの呼び出しは、返された接続オブジェクトを適切に処理する方法を知っていると想定しています。
返された Connection が EntityManager で自動的に閉じられる、または Connection オブジェクト自体を介して解放できる単純なケースでは、実装は Connection のみを含む SimpleConnectionHandle を返すことができます。
releaseJdbcConnectionで他のオブジェクトが必要な場合、実装ではその他のオブジェクトを参照する特別なハンドルを使用する必要があります。- パラメーター:
entityManager- 現在の JPA EntityManagerreadOnly- 接続が読み取り専用の目的でのみ必要かどうか- 戻り値:
- JDBC コネクションを取得できない場合、
releaseJdbcConnectionまたはnullに渡される、コネクションのハンドル - 例外:
PersistenceExceptionEE- JPA メソッドによってスローされた場合SQLExceptionSE- JDBC メソッドによってスローされた場合- 関連事項:
releaseJdbcConnection
void releaseJdbcConnection(ConnectionHandle conHandle, EntityManagerEE entityManager) throws PersistenceExceptionEE, SQLExceptionSE 最初にgetJdbcConnectionを介して取得された、指定された JDBC 接続を解放します。取得した接続ハンドルを適切に解放できるように、これはどのような場合でも呼び出す必要があります。JPA トランザクションが完了したとき、または EntityManager が閉じられたときに
getJdbcConnectionによって返された接続が暗黙的に閉じられる場合、実装は単に何もしない場合があります。- パラメーター:
conHandle- 解放する JDBC 接続ハンドルentityManager- 現在の JPA EntityManager- 例外:
PersistenceExceptionEE- JPA メソッドによってスローされた場合SQLExceptionSE- JDBC メソッドによってスローされた場合- 関連事項: