public class HibernateJpaDialect extends DefaultJpaDialect
JpaDialect
実装 EntityManager。Hibernate 5.2/5.3/5.4 に対して開発されました。HibernateJpaVendorAdapter
, Session.setFlushMode(org.hibernate.FlushMode)
, Transaction.setTimeout(int)
, 直列化された形式 コンストラクターと説明 |
---|
HibernateJpaDialect() |
修飾子と型 | メソッドと説明 |
---|---|
ObjectSE | beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) この実装は、標準の JPA Transaction.begin メソッドを呼び出します。 |
void | cleanupTransaction(ObjectSE transactionData) デフォルトの beginTransaction 実装はクリーンアップを必要としないため、この実装は何も行いません。 |
protected DataAccessException | convertHibernateAccessException(HibernateException ex) 指定された HibernateException を org.springframework.dao 階層からの適切な例外に変換します。 |
ConnectionHandle | getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) この実装は常に null を返し、JDBC 接続を提供できないことを示します。 |
protected SessionImplementor | getSession(EntityManagerEE entityManager) |
protected FlushMode | prepareFlushMode(Session session, boolean readOnly) |
ObjectSE | prepareTransaction(EntityManagerEE entityManager, boolean readOnly, StringSE name) 指定されたセマンティクスを適用して、JPA トランザクションを準備します。 |
void | setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator) Hibernate 例外変換の目的で JDBC 例外トランスレーターを設定します。 |
void | setPrepareConnection(boolean prepareConnection) トランザクション Hibernate セッションの基盤となる JDBC 接続を準備するかどうか、つまり、基盤となる JDBC 接続にトランザクション固有の分離レベルやトランザクションの読み取り専用フラグを適用するかどうかを設定します。 |
DataAccessException | translateExceptionIfPossible(RuntimeExceptionSE ex) この実装は、EntityManagerFactoryUtils に委譲します。 |
releaseJdbcConnection
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setPrepareConnection(boolean prepareConnection)
デフォルトは "true" です。このフラグをオフにすると、JPA トランザクション管理はトランザクションごとの分離レベルをサポートしなくなります。また、読み取り専用トランザクションの場合も Connection.setReadOnly(true)
を呼び出しません。このフラグをオフにすると、接続設定は変更されないため、トランザクション後に JDBC 接続をクリーンアップする必要はありません。
注意 : Spring 4.1 で読み取り専用処理に関するデフォルトの動作が変更され、他の Spring トランザクションマネージャーと同様に、読み取り専用ステータスが JDBC 接続に伝播されるようになりました。これにより、以前は書き込みアクセスが誤って許容されていた読み取り専用の適用が実行されるという影響がある可能性があります。: トランザクション宣言を適宜修正し、必要に応じて無効な読み取り専用マーカーを削除してください。
public void setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator)
Hibernate JDBCException
の検出された SQLException
SE 根本原因に適用され、Hibernate 自身の SQLException
変換をオーバーライドします(特定のターゲットデータベースの Hibernate ダイアレクトに基づきます)。
public ObjectSE beginTransaction(EntityManagerEE entityManager, TransactionDefinition definition) throws PersistenceExceptionEE, SQLExceptionSE, TransactionException
DefaultJpaDialect
Transaction.begin
メソッドを呼び出します。デフォルト以外の分離レベルが設定されている場合、InvalidIsolationLevelException をスローします。 標準の JPA トランザクションには保持する状態がないため、この実装はトランザクションデータオブジェクトを返しません。サブクラスはこの実装の戻り値(null
)を気にする必要がなく、独自のトランザクションデータオブジェクトを自由に返すことができます。
JpaDialect
の beginTransaction
DefaultJpaDialect
の beginTransaction
entityManager
- JPA トランザクションを開始する EntityManagerdefinition
- セマンティクスを定義する Spring トランザクション定義 JpaDialect.cleanupTransaction(java.lang.Object)
に渡される)。SavepointManager
インターフェースを実装できます。PersistenceExceptionEE
- JPA メソッドによってスローされた場合 SQLExceptionSE
- JDBC メソッドによってスローされた場合 TransactionException
- 無効な引数の場合 EntityTransaction.begin()
EE, InvalidIsolationLevelException
, DefaultJpaDialect.cleanupTransaction(java.lang.Object)
public ObjectSE prepareTransaction(EntityManagerEE entityManager, boolean readOnly, @Nullable StringSE name) throws PersistenceExceptionEE
JpaDialect
実装では、読み取り専用フラグをフラッシュモードとして適用できます。その場合は、cleanupTransaction
でリセットするために、以前のフラッシュモード(およびその他のデータ)を保持するトランザクションデータオブジェクトを返すことができます。
実装では、Spring トランザクション名を使用して、特定のデータアクセスのユースケースを最適化することもできます(現在のトランザクション名をユースケース識別子として効果的に使用します)。
JpaDialect
の prepareTransaction
DefaultJpaDialect
の prepareTransaction
entityManager
- JPA トランザクションを開始する EntityManagerreadOnly
- トランザクションが読み取り専用であるかどうか name
- トランザクションの名前 (もしあれば)PersistenceExceptionEE
- JPA メソッドによってスローされた場合 JpaDialect.cleanupTransaction(java.lang.Object)
@Nullable protected FlushMode prepareFlushMode(Session session, boolean readOnly) throws PersistenceExceptionEE
public void cleanupTransaction(@Nullable ObjectSE transactionData)
DefaultJpaDialect
beginTransaction
実装はクリーンアップを必要としないため、この実装は何も行いません。JpaDialect
の cleanupTransaction
DefaultJpaDialect
の cleanupTransaction
transactionData
- トランザクションデータを保持する任意のオブジェクト(存在する場合) (beginTransaction または prepareTransaction によって返される)DefaultJpaDialect.beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
public ConnectionHandle getJdbcConnection(EntityManagerEE entityManager, boolean readOnly) throws PersistenceExceptionEE, SQLExceptionSE
DefaultJpaDialect
null
を返し、JDBC 接続を提供できないことを示します。JpaDialect
の getJdbcConnection
DefaultJpaDialect
の 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)
@Nullable public DataAccessException translateExceptionIfPossible(RuntimeExceptionSE ex)
DefaultJpaDialect
PersistenceExceptionTranslator
の translateExceptionIfPossible
DefaultJpaDialect
の translateExceptionIfPossible
ex
- 変換する RuntimeExceptionnull
。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。)EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)
protected DataAccessException convertHibernateAccessException(HibernateException ex)
org.springframework.dao
階層からの適切な例外に変換します。ex
- 発生した HibernateExceptionprotected SessionImplementor getSession(EntityManagerEE entityManager)