public abstract class

EntityManagerFactoryUtils

extends Object
java.lang.Object
   ↳ org.springframework.orm.jpa.EntityManagerFactoryUtils

Class Overview

Helper class featuring methods for JPA EntityManager handling, allowing for reuse of EntityManager instances within transactions. Also provides support for exception translation.

Mainly intended for internal use within the framework.

Summary

Constants
int ENTITY_MANAGER_SYNCHRONIZATION_ORDER Order value for TransactionSynchronization objects that clean up JPA EntityManagers.
Public Constructors
EntityManagerFactoryUtils()
Public Methods
static void applyTransactionTimeout(Query query, EntityManagerFactory emf)
Apply the current transaction timeout, if any, to the given JPA Query object.
static void closeEntityManager(EntityManager em)
Close the given JPA EntityManager, catching and logging any cleanup exceptions thrown.
static DataAccessException convertJpaAccessExceptionIfPossible(RuntimeException ex)
Convert the given runtime exception to an appropriate exception from the org.springframework.dao hierarchy.
static EntityManager doGetTransactionalEntityManager(EntityManagerFactory emf, Map properties)
Obtain a JPA EntityManager from the given factory.
static EntityManagerFactory findEntityManagerFactory(ListableBeanFactory beanFactory, String unitName)
Find an EntityManagerFactory with the given name in the given Spring application context (represented as ListableBeanFactory).
static EntityManager getTransactionalEntityManager(EntityManagerFactory emf, Map properties)
Obtain a JPA EntityManager from the given factory.
static EntityManager getTransactionalEntityManager(EntityManagerFactory emf)
Obtain a JPA EntityManager from the given factory.
[Expand]
Inherited Methods
From class java.lang.Object

Constants

public static final int ENTITY_MANAGER_SYNCHRONIZATION_ORDER

Order value for TransactionSynchronization objects that clean up JPA EntityManagers. Return DataSourceUtils.CONNECTION_SYNCHRONIZATION_ORDER - 100 to execute EntityManager cleanup before JDBC Connection cleanup, if any.

Constant Value: 900 (0x00000384)

Public Constructors

public EntityManagerFactoryUtils ()

Public Methods

public static void applyTransactionTimeout (Query query, EntityManagerFactory emf)

Apply the current transaction timeout, if any, to the given JPA Query object.

This method sets the JPA 2.0 query hints "javax.persistence.lock.timeout" and "javax.persistence.query.timeout" accordingly.

Parameters
query the JPA Query object
emf JPA EntityManagerFactory that the Query was created for

public static void closeEntityManager (EntityManager em)

Close the given JPA EntityManager, catching and logging any cleanup exceptions thrown.

Parameters
em the JPA EntityManager to close (may be null)
See Also
  • javax.persistence.EntityManager#close()

public static DataAccessException convertJpaAccessExceptionIfPossible (RuntimeException ex)

Convert the given runtime exception to an appropriate exception from the org.springframework.dao hierarchy. Return null if no translation is appropriate: any other exception may have resulted from user code, and should not be translated.

The most important cases like object not found or optimistic locking failure are covered here. For more fine-granular conversion, JpaAccessor and JpaTransactionManager support sophisticated translation of exceptions via a JpaDialect.

Parameters
ex runtime exception that occured
Returns
  • the corresponding DataAccessException instance, or null if the exception should not be translated

public static EntityManager doGetTransactionalEntityManager (EntityManagerFactory emf, Map properties)

Obtain a JPA EntityManager from the given factory. Is aware of a corresponding EntityManager bound to the current thread, for example when using JpaTransactionManager.

Same as getEntityManager, but throwing the original PersistenceException.

Parameters
emf EntityManagerFactory to create the EntityManager with
properties the properties to be passed into the createEntityManager call (may be null)
Returns
  • the EntityManager, or null if none found
Throws
if the EntityManager couldn't be created
PersistenceException
See Also

public static EntityManagerFactory findEntityManagerFactory (ListableBeanFactory beanFactory, String unitName)

Find an EntityManagerFactory with the given name in the given Spring application context (represented as ListableBeanFactory).

The specified unit name will be matched against the configured peristence unit, provided that a discovered EntityManagerFactory implements the EntityManagerFactoryInfo interface. If not, the persistence unit name will be matched against the Spring bean name, assuming that the EntityManagerFactory bean names follow that convention.

Parameters
beanFactory the ListableBeanFactory to search
unitName the name of the persistence unit (never empty)
Returns
  • the EntityManagerFactory
Throws
NoSuchBeanDefinitionException if there is no such EntityManagerFactory in the context

public static EntityManager getTransactionalEntityManager (EntityManagerFactory emf, Map properties)

Obtain a JPA EntityManager from the given factory. Is aware of a corresponding EntityManager bound to the current thread, for example when using JpaTransactionManager.

Note: Will return null if no thread-bound EntityManager found!

Parameters
emf EntityManagerFactory to create the EntityManager with
properties the properties to be passed into the createEntityManager call (may be null)
Returns
  • the EntityManager, or null if none found
Throws
DataAccessResourceFailureException if the EntityManager couldn't be obtained

public static EntityManager getTransactionalEntityManager (EntityManagerFactory emf)

Obtain a JPA EntityManager from the given factory. Is aware of a corresponding EntityManager bound to the current thread, for example when using JpaTransactionManager.

Note: Will return null if no thread-bound EntityManager found!

Parameters
emf EntityManagerFactory to create the EntityManager with
Returns
  • the EntityManager, or null if none found
Throws
DataAccessResourceFailureException if the EntityManager couldn't be obtained