org.springframework.orm.jpa

## Class ExtendedEntityManagerCreator

- java.lang.Object
- - org.springframework.orm.jpa.ExtendedEntityManagerCreator

-     public abstract class ExtendedEntityManagerCreator
      extends Object

  Delegate for creating a variety of `EntityManager` proxies that follow the JPA spec's semantics for "extended" EntityManagers.

  Supports several different variants of "extended" EntityManagers: in particular, an "application-managed extended EntityManager", as defined by `EntityManagerFactory.createEntityManager()`, as well as a "container-managed extended EntityManager", as defined by `PersistenceContextType.EXTENDED`.

  The original difference between "application-managed" and "container-managed" was the need for explicit joining of an externally managed transaction through the `EntityManager.joinTransaction()` method in the "application" case versus the automatic joining on each user-level EntityManager operation in the "container" case. As of JPA 2.1, both join modes are available with both kinds of EntityManagers, so the difference between "application-" and "container-managed" is now primarily in the join mode default and in the restricted lifecycle of a container-managed EntityManager (i.e. tied to the object that it is injected into).

  Since:
    2.0
  Author:
    Juergen Hoeller, Rod Johnson
  See Also:
    `EntityManagerFactory.createEntityManager()`, `PersistenceContextType.EXTENDED`, `EntityManager.joinTransaction()`, `SharedEntityManagerCreator`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ExtendedEntityManagerCreator()`

  - ### Method Summary

    All Methods Static Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static EntityManager` | `createApplicationManagedEntityManager(EntityManager rawEntityManager, EntityManagerFactoryInfo emfInfo)` Create an application-managed extended EntityManager proxy.
    `static EntityManager` | `createApplicationManagedEntityManager(EntityManager rawEntityManager, EntityManagerFactoryInfo emfInfo, boolean synchronizedWithTransaction)` Create an application-managed extended EntityManager proxy.
    `static EntityManager` | `createContainerManagedEntityManager(EntityManager rawEntityManager, EntityManagerFactoryInfo emfInfo)` Create a container-managed extended EntityManager proxy.
    `static EntityManager` | `createContainerManagedEntityManager(EntityManagerFactory emf)` Create a container-managed extended EntityManager proxy.
    `static EntityManager` | `createContainerManagedEntityManager(EntityManagerFactory emf, Map<?,?> properties)` Create a container-managed extended EntityManager proxy.
    `static EntityManager` | `createContainerManagedEntityManager(EntityManagerFactory emf, Map<?,?> properties, boolean synchronizedWithTransaction)` Create a container-managed extended EntityManager proxy.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ExtendedEntityManagerCreator

          public ExtendedEntityManagerCreator()

  - ### Method Detail

    - #### createApplicationManagedEntityManager

          public static EntityManager createApplicationManagedEntityManager(EntityManager rawEntityManager,
                                                                            EntityManagerFactoryInfo emfInfo)

      Create an application-managed extended EntityManager proxy.
      Parameters:
        `rawEntityManager` - the raw EntityManager to decorate
        `emfInfo` - the EntityManagerFactoryInfo to obtain the JpaDialect and PersistenceUnitInfo from
      Returns:
        an application-managed EntityManager that can join transactions but does not participate in them automatically

    - #### createApplicationManagedEntityManager

          public static EntityManager createApplicationManagedEntityManager(EntityManager rawEntityManager,
                                                                            EntityManagerFactoryInfo emfInfo,
                                                                            boolean synchronizedWithTransaction)

      Create an application-managed extended EntityManager proxy.
      Parameters:
        `rawEntityManager` - the raw EntityManager to decorate
        `emfInfo` - the EntityManagerFactoryInfo to obtain the JpaDialect and PersistenceUnitInfo from
        `synchronizedWithTransaction` - whether to automatically join ongoing transactions (according to the JPA 2.1 SynchronizationType rules)
      Returns:
        an application-managed EntityManager that can join transactions but does not participate in them automatically

    - #### createContainerManagedEntityManager

          public static EntityManager createContainerManagedEntityManager(EntityManager rawEntityManager,
                                                                          EntityManagerFactoryInfo emfInfo)

      Create a container-managed extended EntityManager proxy.
      Parameters:
        `rawEntityManager` - the raw EntityManager to decorate
        `emfInfo` - the EntityManagerFactoryInfo to obtain the JpaDialect and PersistenceUnitInfo from
      Returns:
        a container-managed EntityManager that will automatically participate in any managed transaction

    - #### createContainerManagedEntityManager

          public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf)

      Create a container-managed extended EntityManager proxy.
      Parameters:
        `emf` - the EntityManagerFactory to create the EntityManager with. If this implements the EntityManagerFactoryInfo interface, the corresponding JpaDialect and PersistenceUnitInfo will be detected accordingly.
      Returns:
        a container-managed EntityManager that will automatically participate in any managed transaction
      See Also:
        `EntityManagerFactory.createEntityManager()`

    - #### createContainerManagedEntityManager

          public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf,
                                                                          Map<?,?> properties)

      Create a container-managed extended EntityManager proxy.
      Parameters:
        `emf` - the EntityManagerFactory to create the EntityManager with. If this implements the EntityManagerFactoryInfo interface, the corresponding JpaDialect and PersistenceUnitInfo will be detected accordingly.
        `properties` - the properties to be passed into the `createEntityManager` call (may be `null`)
      Returns:
        a container-managed EntityManager that will automatically participate in any managed transaction
      See Also:
        `EntityManagerFactory.createEntityManager(java.util.Map)`

    - #### createContainerManagedEntityManager

          public static EntityManager createContainerManagedEntityManager(EntityManagerFactory emf,
                                                                          Map<?,?> properties,
                                                                          boolean synchronizedWithTransaction)

      Create a container-managed extended EntityManager proxy.
      Parameters:
        `emf` - the EntityManagerFactory to create the EntityManager with. If this implements the EntityManagerFactoryInfo interface, the corresponding JpaDialect and PersistenceUnitInfo will be detected accordingly.
        `properties` - the properties to be passed into the `createEntityManager` call (may be `null`)
        `synchronizedWithTransaction` - whether to automatically join ongoing transactions (according to the JPA 2.1 SynchronizationType rules)
      Returns:
        a container-managed EntityManager that expects container-driven lifecycle management but may opt out of automatic transaction synchronization
      See Also:
        `EntityManagerFactory.createEntityManager(java.util.Map)`