public class HibernateJpaDialect extends DefaultJpaDialect
JpaDialect
implementation for
Hibernate EntityManager. Developed against Hibernate 3.3; tested
against 3.3, 3.5, 3.6, 4.0, 4.1 and 4.2 (with the latter including
Hibernate EntityManager in the Hibernate core distribution).Constructor and Description |
---|
HibernateJpaDialect() |
Modifier and Type | Method and Description |
---|---|
Object |
beginTransaction(EntityManager entityManager,
TransactionDefinition definition)
This implementation invokes the standard JPA
Transaction.begin
method. |
void |
cleanupTransaction(Object transactionData)
This implementation does nothing, since the default
beginTransaction
implementation does not require any cleanup. |
ConnectionHandle |
getJdbcConnection(EntityManager entityManager,
boolean readOnly)
This implementation always returns
null ,
indicating that no JDBC Connection can be provided. |
protected Session |
getSession(EntityManager em) |
Object |
prepareTransaction(EntityManager entityManager,
boolean readOnly,
String name)
Prepare a JPA transaction, applying the specified semantics.
|
DataAccessException |
translateExceptionIfPossible(RuntimeException ex)
This implementation delegates to EntityManagerFactoryUtils.
|
getEntityManagerFactoryPlusOperations, getEntityManagerPlusOperations, releaseJdbcConnection, supportsEntityManagerFactoryPlusOperations, supportsEntityManagerPlusOperations
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition) throws PersistenceException, SQLException, TransactionException
DefaultJpaDialect
Transaction.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
in interface JpaDialect
beginTransaction
in class DefaultJpaDialect
entityManager
- the EntityManager to begin a JPA transaction ondefinition
- the Spring transaction definition that defines semanticsJpaDialect.cleanupTransaction(java.lang.Object)
). May implement the
SavepointManager
interface.PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methodsTransactionException
- in case of invalid argumentsEntityTransaction.begin()
,
InvalidIsolationLevelException
,
DefaultJpaDialect.cleanupTransaction(java.lang.Object)
public Object prepareTransaction(EntityManager entityManager, boolean readOnly, String name) throws PersistenceException
JpaDialect
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, as exposed by the passed-in TransactionDefinition, to optimize for specific data access use cases (effectively using the current transaction name as use case identifier).
prepareTransaction
in interface JpaDialect
prepareTransaction
in class 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)PersistenceException
- if thrown by JPA methodsJpaDialect.cleanupTransaction(java.lang.Object)
public void cleanupTransaction(Object transactionData)
DefaultJpaDialect
beginTransaction
implementation does not require any cleanup.cleanupTransaction
in interface JpaDialect
cleanupTransaction
in class 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)
public ConnectionHandle getJdbcConnection(EntityManager entityManager, boolean readOnly) throws PersistenceException, SQLException
DefaultJpaDialect
null
,
indicating that no JDBC Connection can be provided.getJdbcConnection
in interface JpaDialect
getJdbcConnection
in class DefaultJpaDialect
entityManager
- the current JPA EntityManagerreadOnly
- whether the Connection is only needed for read-only purposesreleaseJdbcConnection
, or null
if no JDBC Connection can be retrievedPersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methodsJpaDialect.releaseJdbcConnection(org.springframework.jdbc.datasource.ConnectionHandle, javax.persistence.EntityManager)
,
ConnectionHandle.getConnection()
,
SimpleConnectionHandle
,
JpaTransactionManager.setDataSource(javax.sql.DataSource)
,
NativeJdbcExtractor
public DataAccessException translateExceptionIfPossible(RuntimeException ex)
DefaultJpaDialect
translateExceptionIfPossible
in interface PersistenceExceptionTranslator
translateExceptionIfPossible
in class DefaultJpaDialect
ex
- a RuntimeException thrownnull
if the
exception could not be translated, as in this case it may result from
user code rather than an actual persistence problem)EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)
protected Session getSession(EntityManager em)