类 HibernateJpaDialect
- java.lang.Object
- org.springframework.orm.jpa.DefaultJpaDialect
- org.springframework.orm.jpa.vendor.HibernateJpaDialect
- 所有已实现的接口:
Serializable
,PersistenceExceptionTranslator
,JpaDialect
public class HibernateJpaDialect extends DefaultJpaDialect
JpaDialect
implementation for Hibernate EntityManager. Developed and tested against Hibernate 3.6, 4.2/4.3 as well as 5.0/5.1/5.2.- 从以下版本开始:
- 2.0
- 作者:
- Juergen Hoeller, Costin Leau
- 另请参阅:
HibernateJpaVendorAdapter
,Session.setFlushMode(org.hibernate.FlushMode)
,Transaction.setTimeout(int)
, 序列化表格
构造器概要
构造器 构造器 说明 HibernateJpaDialect()
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 Object
beginTransaction(EntityManager entityManager, TransactionDefinition definition)
This implementation invokes the standard JPATransaction.begin
method.void
cleanupTransaction(Object transactionData)
This implementation does nothing, since the defaultbeginTransaction
implementation does not require any cleanup.protected DataAccessException
convertHibernateAccessException(HibernateException ex)
Convert the given HibernateException to an appropriate exception from theorg.springframework.dao
hierarchy.ConnectionHandle
getJdbcConnection(EntityManager entityManager, boolean readOnly)
This implementation always returnsnull
, indicating that no JDBC Connection can be provided.protected Session
getSession(EntityManager entityManager)
protected FlushMode
prepareFlushMode(Session session, boolean readOnly)
Object
prepareTransaction(EntityManager entityManager, boolean readOnly, String name)
Prepare a JPA transaction, applying the specified semantics.void
setPrepareConnection(boolean prepareConnection)
Set whether to prepare the underlying JDBC Connection of a transactional Hibernate Session, that is, whether to apply a transaction-specific isolation level and/or the transaction's read-only flag to the underlying JDBC Connection.DataAccessException
translateExceptionIfPossible(RuntimeException ex)
This implementation delegates to EntityManagerFactoryUtils.从类继承的方法 org.springframework.orm.jpa.DefaultJpaDialect
releaseJdbcConnection
构造器详细资料
HibernateJpaDialect
public HibernateJpaDialect()
方法详细资料
setPrepareConnection
public void setPrepareConnection(boolean prepareConnection)
Set whether to prepare the underlying JDBC Connection of a transactional Hibernate Session, that is, whether to apply a transaction-specific isolation level and/or the transaction's read-only flag to the underlying JDBC Connection.Default is "true" on Hibernate EntityManager 4.x (with its 'on-close' connection release mode, and "false" on Hibernate EntityManager 3.6 (due to the 'after-transaction' release mode there). Note that Hibernate 4.2+ is strongly recommended in order to make isolation levels work efficiently.
If you turn this flag off, JPA transaction management will not support per-transaction isolation levels anymore. It will not call
Connection.setReadOnly(true)
for read-only transactions anymore either. If this flag is turned off, no cleanup of a JDBC Connection is required after a transaction, since no Connection settings will get modified.NOTE: The default behavior in terms of read-only handling changed in Spring 4.1, propagating the read-only status to the JDBC Connection now, analogous to other Spring transaction managers. This may have the effect that you're running into read-only enforcement now where previously write access has accidentally been tolerated: Please revise your transaction declarations accordingly, removing invalid read-only markers if necessary.
- 从以下版本开始:
- 4.1
- 另请参阅:
Connection.setTransactionIsolation(int)
,Connection.setReadOnly(boolean)
beginTransaction
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition) throws PersistenceException, SQLException, TransactionException
从类复制的说明:DefaultJpaDialect
This implementation invokes the standard JPATransaction.begin
method. Throws an InvalidIsolationLevelException if a non-default isolation level is set.This implementation does not return any transaction data Object, since there is no state to be kept for a standard JPA transaction. Hence, subclasses do not have to care about the return value (
null
) of this implementation and are free to return their own transaction data Object.- 指定者:
beginTransaction
在接口中JpaDialect
- 覆盖:
beginTransaction
在类中DefaultJpaDialect
- 参数:
entityManager
- the EntityManager to begin a JPA transaction ondefinition
- the Spring transaction definition that defines semantics- 返回:
- an arbitrary object that holds transaction data, if any (to be passed into
JpaDialect.cleanupTransaction(java.lang.Object)
). May implement theSavepointManager
interface. - 抛出:
PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methodsTransactionException
- in case of invalid arguments- 另请参阅:
EntityTransaction.begin()
,InvalidIsolationLevelException
,DefaultJpaDialect.cleanupTransaction(java.lang.Object)
prepareTransaction
public Object prepareTransaction(EntityManager entityManager, boolean readOnly, String name) throws PersistenceException
从接口复制的说明:JpaDialect
Prepare a JPA transaction, applying the specified semantics. Called by EntityManagerFactoryUtils when enlisting an EntityManager in a JTA transaction or a locally joined transaction (e.g. after upgrading an unsynchronized EntityManager to a synchronized one).An implementation can apply the read-only flag as flush mode. In that case, a transaction data object can be returned that holds the previous flush mode (and possibly other data), to be reset in
cleanupTransaction
.Implementations can also use the Spring transaction name to optimize for specific data access use cases (effectively using the current transaction name as use case identifier).
- 指定者:
prepareTransaction
在接口中JpaDialect
- 覆盖:
prepareTransaction
在类中DefaultJpaDialect
- 参数:
entityManager
- the EntityManager to begin a JPA transaction onreadOnly
- whether the transaction is supposed to be read-onlyname
- the name of the transaction (if any)- 返回:
- an arbitrary object that holds transaction data, if any (to be passed into cleanupTransaction)
- 抛出:
PersistenceException
- if thrown by JPA methods- 另请参阅:
JpaDialect.cleanupTransaction(java.lang.Object)
prepareFlushMode
protected FlushMode prepareFlushMode(Session session, boolean readOnly) throws PersistenceException
cleanupTransaction
public void cleanupTransaction(Object transactionData)
从类复制的说明:DefaultJpaDialect
This implementation does nothing, since the defaultbeginTransaction
implementation does not require any cleanup.- 指定者:
cleanupTransaction
在接口中JpaDialect
- 覆盖:
cleanupTransaction
在类中DefaultJpaDialect
- 参数:
transactionData
- arbitrary object that holds transaction data, if any (as returned by beginTransaction or prepareTransaction)- 另请参阅:
DefaultJpaDialect.beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
getJdbcConnection
public ConnectionHandle getJdbcConnection(EntityManager entityManager, boolean readOnly) throws PersistenceException, SQLException
从类复制的说明:DefaultJpaDialect
This implementation always returnsnull
, indicating that no JDBC Connection can be provided.- 指定者:
getJdbcConnection
在接口中JpaDialect
- 覆盖:
getJdbcConnection
在类中DefaultJpaDialect
- 参数:
entityManager
- the current JPA EntityManagerreadOnly
- whether the Connection is only needed for read-only purposes- 返回:
- a handle for the Connection, to be passed into
releaseJdbcConnection
, ornull
if no JDBC Connection can be retrieved - 抛出:
PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methods- 另请参阅:
JpaDialect.releaseJdbcConnection(org.springframework.jdbc.datasource.ConnectionHandle, javax.persistence.EntityManager)
,ConnectionHandle.getConnection()
,SimpleConnectionHandle
,JpaTransactionManager.setDataSource(javax.sql.DataSource)
,NativeJdbcExtractor
translateExceptionIfPossible
public DataAccessException translateExceptionIfPossible(RuntimeException ex)
从类复制的说明:DefaultJpaDialect
This implementation delegates to EntityManagerFactoryUtils.- 指定者:
translateExceptionIfPossible
在接口中PersistenceExceptionTranslator
- 覆盖:
translateExceptionIfPossible
在类中DefaultJpaDialect
- 参数:
ex
- a RuntimeException to translate- 返回:
- the corresponding DataAccessException (or
null
if the exception could not be translated, as in this case it may result from user code rather than from an actual persistence problem) - 另请参阅:
EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)
convertHibernateAccessException
protected DataAccessException convertHibernateAccessException(HibernateException ex)
Convert the given HibernateException to an appropriate exception from theorg.springframework.dao
hierarchy.- 参数:
ex
- HibernateException that occurred- 返回:
- the corresponding DataAccessException instance
getSession
protected Session getSession(EntityManager entityManager)