インターフェース JpaDialect

すべてのスーパーインターフェース:
PersistenceExceptionTranslator
すべての既知の実装クラス:
DefaultJpaDialectEclipseLinkJpaDialectHibernateJpaDialect

public interface JpaDialect extends PersistenceExceptionTranslator
基になる JDBC 接続へのアクセスなど、標準の JPA 3.0 が提供しない特定の機能をカプセル化する SPI 戦略。この戦略は主に、JPA プロバイダーのスタンドアロンでの使用を目的としています。JTA トランザクションで実行する場合、その機能のほとんどは関係ありません。

一般に、このインターフェースを直接実装するのではなく、DefaultJpaDialect から派生させることをお勧めします。これにより、DefaultJpaDialect から共通の動作(現在および将来)を継承し、特定のフックをオーバーライドして、具体的なベンダー固有の動作をプラグインすることができます。

導入:
2.0
作成者:
Juergen Hoeller, Rod Johnson
関連事項:
  • メソッドの詳細

    • beginTransaction

      特定の Spring トランザクション定義で指定されたセマンティクス(特に、分離レベルとタイムアウト)を適用して、特定の JPA トランザクションを開始します。トランザクションの開始時に JpaTransactionManager によって呼び出されます。

      実装は、JPA トランザクションオブジェクトを構成してから begin を呼び出すか、分離レベルなどを取る特別な begin メソッドを呼び出すことができます。

      実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合、以前のフラッシュモード(および場合によっては他のデータ)を保持するトランザクションデータオブジェクトを返し、cleanupTransaction でリセットできます。また、トランザクションを開始する前に、基になる JDBC 接続に読み取り専用フラグと分離レベルを適用する場合もあります。

      実装では、渡された TransactionDefinition によって公開される Spring トランザクション名を使用して、特定のデータアクセスのユースケース(現在のトランザクション名をユースケース識別子として効果的に使用する)に最適化することもできます。

      このメソッドは、Spring の SavepointManager インターフェースを実装するオブジェクトを返すことにより、永続性プロバイダーによってサポートされている場合、セーブポイント機能を公開することもできます。JpaTransactionManager は、必要に応じてこの機能を使用します。

      パラメーター:
      entityManager - JPA トランザクションを開始する EntityManager
      definition - セマンティクスを定義する 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 トランザクションまたはローカルに参加したトランザクションに参加させるときに(たとえば、非同期 EntityManager を同期トランザクションにアップグレードした後)EntityManagerFactoryUtils によって呼び出されます。

      実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合は、cleanupTransaction でリセットするために、以前のフラッシュモード(およびその他のデータ)を保持するトランザクションデータオブジェクトを返すことができます。

      実装では、Spring トランザクション名を使用して、特定のデータアクセスのユースケースを最適化することもできます(現在のトランザクション名をユースケース識別子として効果的に使用します)。

      パラメーター:
      entityManager - JPA トランザクションを開始する EntityManager
      readOnly - トランザクションが読み取り専用であるかどうか
      name - トランザクションの名前 (もしあれば)
      戻り値:
      トランザクションデータがある場合、それを保持する任意のオブジェクト (cleanupTransaction に渡される)
      例外:
      PersistenceExceptionEE - JPA メソッドによってスローされた場合
      関連事項:
    • cleanupTransaction

      void cleanupTransaction(@Nullable ObjectSE transactionData)
      指定されたトランザクションデータを介してトランザクションをクリーンアップします。トランザクションのクリーンアップ時に 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 EntityManager
      readOnly - 接続が読み取り専用の目的でのみ必要かどうか
      戻り値:
      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 メソッドによってスローされた場合
      関連事項: