jakarta.persistence.EntityManagerFactory
- Super Interfaces:
AutoCloseable
EntityManager. A persistence unit defines the set of all classes that are related or grouped by the application, and which must be colocated in their mapping to a single database. If two entity types participate in an association, then they must belong to the same persistence unit.
A persistence unit may be defined by a persistence.xml file, or it may be defined at runtime via the PersistenceConfiguration API.
Every persistence unit has a transaction type, either JTA, or RESOURCE_LOCAL. Resource-local transactions are managed programmatically via the EntityTransaction interface.
An EntityManagerFactory with a lifecycle managed by the application may be created using the static operations of the Persistence class:
- if the persistence unit is defined in
persistence.xml, an entity manager factory may be created by callingPersistence.createEntityManagerFactoryorPersistence.createEntityManagerFactory, or - if the persistence unit was defined using
PersistenceConfiguration, an entity manager factory may be created by callingPersistence.createEntityManagerFactory.
Usually, there is exactly one EntityManagerFactory for each persistence unit:
// create a factory at initialization time static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("orderMgt");
Alternatively, in the Jakarta EE environment, a container-managed EntityManagerFactory may be obtained by dependency injection, using PersistenceUnit.
// inject the container-managed factory @PersistenceUnit(unitName="orderMgt") EntityManagerFactory entityManagerFactory;
An application-managed EntityManager may be created via a call to createEntityManager. However, this approach places complete responsibility for cleanup and exception management on the client, and is thus considered error-prone. It is much safer to use the methods runInTransaction and callInTransaction to obtain EntityManagers. Alternatively, in the Jakarta EE environment, a container-managed EntityManager may be obtained by dependency injection, using PersistenceContext, and the application need not interact with the EntityManagerFactory directly.
The EntityManagerFactory provides access to certain other useful APIs:
- an instance of
Metamodelexposing a model of the managed types associated with the persistence unit may be obtained by callinggetMetamodel, - an instance of
SchemaManager, allowing programmatic control over schema generation and validation, may be obtained by callinggetSchemaManager, - an instance of
Cache, allowing direct programmatic control over the second-level cache, may be obtained by callinggetCache, - the
CriteriaBuilder, used to define criteria queries, may be obtained by callinggetCriteriaBuilder, and - the
PersistenceUnitUtilmay be obtained by callinggetPersistenceUnitUtil.
When the application has finished using the entity manager factory, or when the application terminates, the application should close the entity manager factory. If necessary, a Cleaner may be used:
// factory should be destroyed before program terminates Cleaner.create().register(entityManagerFactory, entityManagerFactory::close);Once an
EntityManagerFactory has been closed, all its entity managers are considered to be in the closed state.- See Also:
- Since:
- Jakarta Persistence (JPA) 1.0
EntityManagerFactory.Public Instance Methods
- Parameters:
graphName- name for the entity graphentityGraph- entity graph
- Since:
- Jakarta Persistence (JPA) 2.1
Any configuration of the query object (except for actual parameter binding) in effect when the named query is added is retained as part of the named query definition. This includes configuration information such as max results, hints, flush mode, lock mode, result set mapping information, and information about stored procedure parameters.
When the query is executed, information that can be set by means of the query APIs can be overridden. Information that is overridden does not affect the named query as registered with the entity manager factory, and thus does not affect subsequent query objects created from it by calling createNamedQuery or createNamedStoredProcedureQuery.
If a named query of the same name has been previously defined, either statically via metadata or via this method, that query definition is replaced.
- Parameters:
name- name for the queryquery- aQuery,TypedQuery<X>, orStoredProcedureQuery
- Since:
- Jakarta Persistence (JPA) 2.1
If the transaction type of the persistence unit is JTA, and there is a JTA transaction already associated with the caller, then the EntityManager is associated with this current transaction. If the given function returns without throwing an exception, the result of the function is returned. If the given function throws an exception, the JTA transaction is marked for rollback, and the exception is rethrown.
Otherwise, if the transaction type of the persistence unit is resource-local, or if there is no JTA transaction already associated with the caller, then the EntityManager is associated with a new transaction. If the given function returns without throwing an exception, this transaction is committed and the result of the function is returned. If the function does throw an exception, the transaction is rolled back, and the exception is rethrown.
Finally, the EntityManager is closed before this method returns control to the client.
- Parameters:
work- a function to be called in the scope of the transaction
- Returns:
- the value returned by the given function.
- Since:
- Jakarta Persistence (JPA) 3.2
void close()IllegalStateException, except for isOpen, which will return false. Once an EntityManagerFactory has been closed, all its entity managers are considered to be in the closed state.AutoCloseable.java.lang.AutoCloseable/close()- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 1.0
EntityManager instance each time it is invoked. The EntityManager.isOpen method will return true on the returned instance.
- Returns:
- entity manager instance.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 1.0
EntityManager instance each time it is invoked. The EntityManager.isOpen method will return true on the returned instance.
- Parameters:
map- properties for entity manager
- Returns:
- entity manager instance.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 1.0
EntityManager instance each time it is invoked. The EntityManager.isOpen method will return true on the returned instance.
- Parameters:
synchronizationType- how and when the entity manager should be synchronized with the current JTA transaction
- Returns:
- entity manager instance.
- Throws:
- if the entity manager factory has been configured for resource-local entity managers or is closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.1
EntityManager instance each time it is invoked. The EntityManager.isOpen method will return true on the returned instance.
- Parameters:
synchronizationType- how and when the entity manager should be synchronized with the current JTA transactionmap- properties for entity manager
- Returns:
- entity manager instance.
- Throws:
- if the entity manager factory has been configured for resource-local entity managers or is closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.1
- Returns:
- an instance of
Cache, or null if there is no second-level cache in use.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.0
- Returns:
- an instance of
CriteriaBuilder.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- See Also:
- Since:
- Jakarta Persistence (JPA) 2.0
- Returns:
- an instance of
Metamodel.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.0
String getName()- Since:
- Jakarta Persistence (JPA) 3.2
- Parameters:
entityType- any Java type, includingObject.classmeaning all entity graphs
- Returns:
- a map keyed by graph name.
- Since:
- Jakarta Persistence (JPA) 3.2
- Parameters:
resultType- any Java type, includingObject.classmeaning all queries
- Returns:
- a map keyed by query name.
- Since:
- Jakarta Persistence (JPA) 3.2
- Returns:
- an instance of
PersistenceUnitUtil.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.0
Map<String,Object> getProperties()- Returns:
- properties.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 2.0
- Returns:
- an instance of
SchemaManager.
- Throws:
- if the entity manager factory has been closed.IllegalStateException
- Since:
- Jakarta Persistence (JPA) 3.2
- Since:
- Jakarta Persistence (JPA) 3.2
boolean isOpen()- Returns:
- boolean indicating whether the factory is open.
- Since:
- Jakarta Persistence (JPA) 1.0
If the transaction type of the persistence unit is JTA, and there is a JTA transaction already associated with the caller, then the EntityManager is associated with this current transaction. If the given function throws an exception, the JTA transaction is marked for rollback, and the exception is rethrown.
Otherwise, if the transaction type of the persistence unit is resource-local, or if there is no JTA transaction already associated with the caller, then the EntityManager is associated with a new transaction. If the given function returns without throwing an exception, this transaction is committed. If the function does throw an exception, the transaction is rolled back, and the exception is rethrown.
Finally, the EntityManager is closed before this method returns control to the client.
- Parameters:
work- a function to be executed in the scope of the transaction
- Since:
- Jakarta Persistence (JPA) 3.2
EntityManagerFactory does not support the given type, the PersistenceException is thrown.- Parameters:
cls- the class of the object to be returned. This is usually either the underlying class implementingEntityManagerFactoryor an interface it implements.
- Returns:
- an instance of the specified class.
- Throws:
- if the provider does not support the given type.PersistenceException
- Since:
- Jakarta Persistence (JPA) 2.1