public class DefaultJpaDialect extends ObjectSE implements JpaDialect, SerializableSE
JpaDialect
インターフェースのデフォルト実装。JpaTransactionManager
がデフォルトのダイアレクトとして使用します。beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
で標準の JPA トランザクションを開始し、EntityManagerFactoryUtils
を介して標準の例外変換を実行します。
NOTE: Spring の JPA サポートには、Spring 5.0 以降の JPA 2.1 以降が必要です。
JpaTransactionManager.setJpaDialect(org.springframework.orm.jpa.JpaDialect)
, 直列化された形式 コンストラクターと説明 |
---|
DefaultJpaDialect() |
修飾子と型 | メソッドと説明 |
---|---|
ObjectSE | beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) この実装は、標準の JPA Transaction.begin メソッドを呼び出します。 |
void | cleanupTransaction(ObjectSE transactionData) デフォルトの beginTransaction 実装はクリーンアップを必要としないため、この実装は何も行いません。 |
ConnectionHandle | getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) この実装は常に null を返し、JDBC 接続を提供できないことを示します。 |
ObjectSE | prepareTransaction(EntityManagerEE entityManager, boolean readOnly, StringSE name) 指定されたセマンティクスを適用して、JPA トランザクションを準備します。 |
void | releaseJdbcConnection(ConnectionHandle conHandle, EntityManagerEE em) Connection が EntityManager で暗黙的に閉じられると仮定すると、この実装は何もしません。 |
DataAccessException | translateExceptionIfPossible(RuntimeExceptionSE ex) この実装は、EntityManagerFactoryUtils に委譲します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
@Nullable public ObjectSE beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) throws PersistenceExceptionEE, SQLExceptionSE, TransactionException
Transaction.begin
メソッドを呼び出します。デフォルト以外の分離レベルが設定されている場合、InvalidIsolationLevelException をスローします。 標準の JPA トランザクションには保持する状態がないため、この実装はトランザクションデータオブジェクトを返しません。サブクラスはこの実装の戻り値(null
)を気にする必要がなく、独自のトランザクションデータオブジェクトを自由に返すことができます。
JpaDialect
の beginTransaction
entityManager
- JPA トランザクションを開始する EntityManagerdefinition
- セマンティクスを定義する Spring トランザクション定義 JpaDialect.cleanupTransaction(java.lang.Object)
に渡される)。SavepointManager
インターフェースを実装できます。PersistenceExceptionEE
- JPA メソッドによってスローされた場合 SQLExceptionSE
- JDBC メソッドによってスローされた場合 TransactionException
- 無効な引数の場合 EntityTransaction.begin()
EE, InvalidIsolationLevelException
, cleanupTransaction(java.lang.Object)
@Nullable public ObjectSE prepareTransaction(EntityManagerEE entityManager, boolean readOnly, @Nullable StringSE name) throws PersistenceExceptionEE
JpaDialect
実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合は、cleanupTransaction
でリセットするために、以前のフラッシュモード(およびその他のデータ)を保持するトランザクションデータオブジェクトを返すことができます。
実装では、Spring トランザクション名を使用して、特定のデータアクセスのユースケースを最適化することもできます(現在のトランザクション名をユースケース識別子として効果的に使用します)。
JpaDialect
の prepareTransaction
entityManager
- JPA トランザクションを開始する EntityManagerreadOnly
- トランザクションが読み取り専用であるかどうか name
- トランザクションの名前 (もしあれば)PersistenceExceptionEE
- JPA メソッドによってスローされた場合 JpaDialect.cleanupTransaction(java.lang.Object)
public void cleanupTransaction(@Nullable ObjectSE transactionData)
beginTransaction
実装はクリーンアップを必要としないため、この実装は何も行いません。JpaDialect
の cleanupTransaction
transactionData
- トランザクションデータを保持する任意のオブジェクト(存在する場合) (beginTransaction または prepareTransaction によって返される)beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
@Nullable public ConnectionHandle getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) throws PersistenceExceptionEE, SQLExceptionSE
null
を返し、JDBC 接続を提供できないことを示します。JpaDialect
の getJdbcConnection
entityManager
- 現在の JPA EntityManagerreadOnly
- 接続が読み取り専用の目的でのみ必要かどうか releaseJdbcConnection
または null
に渡される、コネクションのハンドル PersistenceExceptionEE
- JPA メソッドによってスローされた場合 SQLExceptionSE
- JDBC メソッドによってスローされた場合 JpaDialect.releaseJdbcConnection(org.springframework.jdbc.datasource.ConnectionHandle, javax.persistence.EntityManager)
, ConnectionHandle.getConnection()
, SimpleConnectionHandle
, JpaTransactionManager.setDataSource(javax.sql.DataSource)
public void releaseJdbcConnection(ConnectionHandle conHandle, EntityManagerEE em) throws PersistenceExceptionEE, SQLExceptionSE
JPA 実装が、使用後にアプリケーションが閉じることを期待する接続ハンドルを返す場合、ダイアレクト実装は Connection.close()
(または同様の効果を持つ他のメソッド)をここで呼び出す必要があります。
JpaDialect
の releaseJdbcConnection
conHandle
- 解放する JDBC 接続ハンドル em
- 現在の JPA EntityManagerPersistenceExceptionEE
- JPA メソッドによってスローされた場合 SQLExceptionSE
- JDBC メソッドによってスローされた場合 Connection.close()
SE@Nullable public DataAccessException translateExceptionIfPossible(RuntimeExceptionSE ex)
PersistenceExceptionTranslator
の translateExceptionIfPossible
ex
- 変換する RuntimeExceptionnull
。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。)EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)