Class DefaultJpaDialect
- java.lang.Object
- org.springframework.orm.jpa.DefaultJpaDialect
- All Implemented Interfaces:
Serializable
,PersistenceExceptionTranslator
,JpaDialect
- Direct Known Subclasses:
EclipseLinkJpaDialect
,HibernateJpaDialect
,OpenJpaDialect
public class DefaultJpaDialect extends Object implements JpaDialect, Serializable
Default implementation of theJpaDialect
interface. Used as default dialect byJpaTransactionManager
.Simply begins a standard JPA transaction in
beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
and performs standard exception translation throughEntityManagerFactoryUtils
.NOTE: Spring's JPA support requires JPA 2.0 or higher, as of Spring 4.0.
- Since:
- 2.0
- Author:
- Juergen Hoeller
- See Also:
JpaTransactionManager.setJpaDialect(org.springframework.orm.jpa.JpaDialect)
, Serialized Form
Constructor Summary
Constructors Constructor Description DefaultJpaDialect()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.ConnectionHandle
getJdbcConnection(EntityManager entityManager, boolean readOnly)
This implementation always returnsnull
, indicating that no JDBC Connection can be provided.Object
prepareTransaction(EntityManager entityManager, boolean readOnly, String name)
Prepare a JPA transaction, applying the specified semantics.void
releaseJdbcConnection(ConnectionHandle conHandle, EntityManager em)
This implementation does nothing, assuming that the Connection will implicitly be closed with the EntityManager.DataAccessException
translateExceptionIfPossible(RuntimeException ex)
This implementation delegates to EntityManagerFactoryUtils.
Constructor Detail
DefaultJpaDialect
public DefaultJpaDialect()
Method Detail
beginTransaction
public Object beginTransaction(EntityManager entityManager, TransactionDefinition definition) throws PersistenceException, SQLException, TransactionException
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.- Specified by:
beginTransaction
in interfaceJpaDialect
- Parameters:
entityManager
- the EntityManager to begin a JPA transaction ondefinition
- the Spring transaction definition that defines semantics- Returns:
- an arbitrary object that holds transaction data, if any (to be passed into
JpaDialect.cleanupTransaction(java.lang.Object)
). May implement theSavepointManager
interface. - Throws:
PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methodsTransactionException
- in case of invalid arguments- See Also:
EntityTransaction.begin()
,InvalidIsolationLevelException
,cleanupTransaction(java.lang.Object)
prepareTransaction
public Object prepareTransaction(EntityManager entityManager, boolean readOnly, String name) throws PersistenceException
Description copied from interface: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).
- Specified by:
prepareTransaction
in interfaceJpaDialect
- Parameters:
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)- Returns:
- an arbitrary object that holds transaction data, if any (to be passed into cleanupTransaction)
- Throws:
PersistenceException
- if thrown by JPA methods- See Also:
JpaDialect.cleanupTransaction(java.lang.Object)
cleanupTransaction
public void cleanupTransaction(Object transactionData)
This implementation does nothing, since the defaultbeginTransaction
implementation does not require any cleanup.- Specified by:
cleanupTransaction
in interfaceJpaDialect
- Parameters:
transactionData
- arbitrary object that holds transaction data, if any (as returned by beginTransaction or prepareTransaction)- See Also:
beginTransaction(javax.persistence.EntityManager, org.springframework.transaction.TransactionDefinition)
getJdbcConnection
public ConnectionHandle getJdbcConnection(EntityManager entityManager, boolean readOnly) throws PersistenceException, SQLException
This implementation always returnsnull
, indicating that no JDBC Connection can be provided.- Specified by:
getJdbcConnection
in interfaceJpaDialect
- Parameters:
entityManager
- the current JPA EntityManagerreadOnly
- whether the Connection is only needed for read-only purposes- Returns:
- a handle for the Connection, to be passed into
releaseJdbcConnection
, ornull
if no JDBC Connection can be retrieved - Throws:
PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methods- See Also:
JpaDialect.releaseJdbcConnection(org.springframework.jdbc.datasource.ConnectionHandle, javax.persistence.EntityManager)
,ConnectionHandle.getConnection()
,SimpleConnectionHandle
,JpaTransactionManager.setDataSource(javax.sql.DataSource)
,NativeJdbcExtractor
releaseJdbcConnection
public void releaseJdbcConnection(ConnectionHandle conHandle, EntityManager em) throws PersistenceException, SQLException
This implementation does nothing, assuming that the Connection will implicitly be closed with the EntityManager.If the JPA implementation returns a Connection handle that it expects the application to close after use, the dialect implementation needs to invoke
Connection.close()
(or some other method with similar effect) here.- Specified by:
releaseJdbcConnection
in interfaceJpaDialect
- Parameters:
conHandle
- the JDBC Connection handle to releaseem
- the current JPA EntityManager- Throws:
PersistenceException
- if thrown by JPA methodsSQLException
- if thrown by JDBC methods- See Also:
Connection.close()
translateExceptionIfPossible
public DataAccessException translateExceptionIfPossible(RuntimeException ex)
This implementation delegates to EntityManagerFactoryUtils.- Specified by:
translateExceptionIfPossible
in interfacePersistenceExceptionTranslator
- Parameters:
ex
- a RuntimeException to translate- Returns:
- 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) - See Also:
EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(java.lang.RuntimeException)