spring-framework / org.springframework.orm.jpa / EntityManagerFactoryAccessor

EntityManagerFactoryAccessor

abstract class EntityManagerFactoryAccessor : BeanFactoryAware

Base class for any class that needs to access a JPA EntityManagerFactory, usually in order to obtain a JPA EntityManager. Defines common properties.

Author
Juergen Hoeller

Since
2.0

See Also
EntityManagerFactoryUtils

Constructors

<init>

EntityManagerFactoryAccessor()

Base class for any class that needs to access a JPA EntityManagerFactory, usually in order to obtain a JPA EntityManager. Defines common properties.

Functions

getEntityManagerFactory

open fun getEntityManagerFactory(): EntityManagerFactory

Return the JPA EntityManagerFactory that should be used to create EntityManagers.

getJpaPropertyMap

open fun getJpaPropertyMap(): MutableMap<String, Any>

Allow Map access to the JPA properties to be passed to the persistence provider, with the option to add or override specific entries.

Useful for specifying entries directly, for example via "jpaPropertyMap[myKey]".

getPersistenceUnitName

open fun getPersistenceUnitName(): String

Return the name of the persistence unit to access the EntityManagerFactory for, if any.

setBeanFactory

open fun setBeanFactory(beanFactory: BeanFactory): Unit

Retrieves an EntityManagerFactory by persistence unit name, if none set explicitly. Falls back to a default EntityManagerFactory bean if no persistence unit specified.

setEntityManagerFactory

open fun setEntityManagerFactory(emf: EntityManagerFactory): Unit

Set the JPA EntityManagerFactory that should be used to create EntityManagers.

setJpaProperties

open fun setJpaProperties(jpaProperties: Properties): Unit

Specify JPA properties, to be passed into EntityManagerFactory.createEntityManager(Map) (if any).

Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.

setJpaPropertyMap

open fun setJpaPropertyMap(jpaProperties: MutableMap<String, Any>): Unit

Specify JPA properties as a Map, to be passed into EntityManagerFactory.createEntityManager(Map) (if any).

Can be populated with a "map" or "props" element in XML bean definitions.

setPersistenceUnitName

open fun setPersistenceUnitName(persistenceUnitName: String): Unit

Set the name of the persistence unit to access the EntityManagerFactory for.

This is an alternative to specifying the EntityManagerFactory by direct reference, resolving it by its persistence unit name instead. If no EntityManagerFactory and no persistence unit name have been specified, a default EntityManagerFactory will be retrieved through finding a single unique bean of type EntityManagerFactory.

Inheritors

HibernateJpaSessionFactoryBean

open class HibernateJpaSessionFactoryBean : EntityManagerFactoryAccessor, FactoryBean<SessionFactory>

Simple FactoryBean that exposes the underlying SessionFactory behind a Hibernate-backed JPA EntityManagerFactory.

Primarily available for resolving a SessionFactory by JPA persistence unit name via the "persistenceUnitName" bean property.

Note that, for straightforward cases, you could also simply declare a factory method:

 <bean id="sessionFactory" factory-bean="entityManagerFactory" factory-method="getSessionFactory"/> 

And as of JPA 2.1, EntityManagerFactory#unwrap provides a nice approach as well, in particular within configuration class arrangements:

 @Bean public SessionFactory sessionFactory(@Qualifier("entityManagerFactory") EntityManagerFactory emf) { return emf.unwrap(SessionFactory.class); } 
Please note: Since Hibernate 5.2 changed its SessionFactory interface to extend JPA's EntityManagerFactory, you may get conflicts when injecting by type, with both the original factory and your custom SessionFactory matching EntityManagerFactory. An explicit qualifier for the original factory (as indicated above) is recommended here.

OpenEntityManagerInViewInterceptor

open class OpenEntityManagerInViewInterceptor : EntityManagerFactoryAccessor, AsyncWebRequestInterceptor

Spring web request interceptor that binds a JPA EntityManager to the thread for the entire processing of the request. Intended for the "Open EntityManager in View" pattern, i.e. to allow for lazy loading in web views despite the original transactions already being completed.

This interceptor makes JPA EntityManagers available via the current thread, which will be autodetected by transaction managers. It is suitable for service layer transactions via org.springframework.orm.jpa.JpaTransactionManager or org.springframework.transaction.jta.JtaTransactionManager as well as for non-transactional read-only execution.

In contrast to OpenEntityManagerInViewFilter, this interceptor is set up in a Spring application context and can thus take advantage of bean wiring.

SharedEntityManagerBean

open class SharedEntityManagerBean : EntityManagerFactoryAccessor, FactoryBean<EntityManager>, InitializingBean

FactoryBean that exposes a shared JPA javax.persistence.EntityManager reference for a given EntityManagerFactory. Typically used for an EntityManagerFactory created by org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean, as direct alternative to a JNDI lookup for a Java EE server's EntityManager reference.

The shared EntityManager will behave just like an EntityManager fetched from an application server's JNDI environment, as defined by the JPA specification. It will delegate all calls to the current transactional EntityManager, if any; otherwise, it will fall back to a newly created EntityManager per operation.

Can be passed to DAOs that expect a shared EntityManager reference rather than an EntityManagerFactory. Note that Spring's org.springframework.orm.jpa.JpaTransactionManager always needs an EntityManagerFactory in order to create new transactional EntityManager instances.