public class HibernateJpaDialect extends DefaultJpaDialect
JpaDialect
implementation for
Hibernate EntityManager. Developed against Hibernate 3.6 and 4.2/4.3.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. |
protected DataAccessException |
convertHibernateAccessException(HibernateException ex)
Convert the given HibernateException to an appropriate exception
from the
org.springframework.dao hierarchy. |
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.
|
releaseJdbcConnection
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 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 DataAccessException convertHibernateAccessException(HibernateException ex)
org.springframework.dao
hierarchy.ex
- HibernateException that occurredprotected Session getSession(EntityManager em)