org.springframework.orm.jpa.persistenceunit

Class DefaultPersistenceUnitManager

  • java.lang.Object
    • org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      void afterPropertiesSet()
      Invoked by the containing BeanFactory after it has set all bean properties and satisfied BeanFactoryAware, ApplicationContextAware etc.
      DataSourceLookup getDataSourceLookup()
      Return the JDBC DataSourceLookup that provides DataSources for the persistence provider, resolving data source names in persistence.xml against Spring-managed DataSource instances.
      javax.sql.DataSource getDefaultDataSource()
      Return the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      javax.sql.DataSource getDefaultJtaDataSource()
      Return the JTA-aware DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      LoadTimeWeaver getLoadTimeWeaver()
      Return the Spring LoadTimeWeaver to use for class instrumentation according to the JPA class transformer contract.
      protected MutablePersistenceUnitInfo getPersistenceUnitInfo(java.lang.String persistenceUnitName)
      Return the specified PersistenceUnitInfo from this manager's cache of processed persistence units, keeping it in the cache (i.e.
      PersistenceUnitPostProcessor[] getPersistenceUnitPostProcessors()
      Return the PersistenceUnitPostProcessors to be applied to each PersistenceUnitInfo that has been parsed by this manager.
      protected boolean isPersistenceUnitOverrideAllowed()
      Return whether an override of a same-named persistence unit is allowed.
      PersistenceUnitInfo obtainDefaultPersistenceUnitInfo()
      Obtain the default PersistenceUnitInfo from this manager.
      PersistenceUnitInfo obtainPersistenceUnitInfo(java.lang.String persistenceUnitName)
      Obtain the specified PersistenceUnitInfo from this manager.
      protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui)
      Hook method allowing subclasses to customize each PersistenceUnitInfo.
      void preparePersistenceUnitInfos()
      Prepare the PersistenceUnitInfos according to the configuration of this manager: scanning for persistence.xml files, parsing all matching files, configuring and post-processing them.
      void setDataSourceLookup(DataSourceLookup dataSourceLookup)
      Specify the JDBC DataSourceLookup that provides DataSources for the persistence provider, resolving data source names in persistence.xml against Spring-managed DataSource instances.
      void setDataSources(java.util.Map<java.lang.String,javax.sql.DataSource> dataSources)
      Specify the JDBC DataSources that the JPA persistence provider is supposed to use for accessing the database, resolving data source names in persistence.xml against Spring-managed DataSources.
      void setDefaultDataSource(javax.sql.DataSource defaultDataSource)
      Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      void setDefaultJtaDataSource(javax.sql.DataSource defaultJtaDataSource)
      Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      void setDefaultPersistenceUnitName(java.lang.String defaultPersistenceUnitName)
      Specify the name of the default persistence unit, if any.
      void setDefaultPersistenceUnitRootLocation(java.lang.String defaultPersistenceUnitRootLocation)
      Set the default persistence unit root location, to be applied if no unit-specific persistence unit root could be determined.
      void setLoadTimeWeaver(LoadTimeWeaver loadTimeWeaver)
      Specify the Spring LoadTimeWeaver to use for class instrumentation according to the JPA class transformer contract.
      void setMappingResources(java.lang.String... mappingResources)
      Specify one or more mapping resources (equivalent to <mapping-file> entries in persistence.xml) for the default persistence unit.
      void setPackagesToScan(java.lang.String... packagesToScan)
      Set whether to use Spring-based scanning for entity classes in the classpath instead of using JPA's standard scanning of jar files with persistence.xml markers in them.
      void setPersistenceUnitPostProcessors(PersistenceUnitPostProcessor... postProcessors)
      Set the PersistenceUnitPostProcessors to be applied to each PersistenceUnitInfo that has been parsed by this manager.
      void setPersistenceXmlLocation(java.lang.String persistenceXmlLocation)
      Specify the location of the persistence.xml files to load.
      void setPersistenceXmlLocations(java.lang.String... persistenceXmlLocations)
      Specify multiple locations of persistence.xml files to load.
      void setResourceLoader(ResourceLoader resourceLoader)
      Set the ResourceLoader that this object runs in.
      void setSharedCacheMode(SharedCacheMode sharedCacheMode)
      Specify the JPA 2.0 shared cache mode for all of this manager's persistence units, overriding any value in persistence.xml if set.
      void setValidationMode(ValidationMode validationMode)
      Specify the JPA 2.0 validation mode for all of this manager's persistence units, overriding any value in persistence.xml if set.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_PERSISTENCE_XML_LOCATION

        public static final java.lang.String DEFAULT_PERSISTENCE_XML_LOCATION
        Default location of the persistence.xml file: "classpath*:META-INF/persistence.xml".
        See Also:
        Constant Field Values
      • ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION

        public static final java.lang.String ORIGINAL_DEFAULT_PERSISTENCE_UNIT_ROOT_LOCATION
        Default location for the persistence unit root URL: "classpath:", indicating the root of the classpath.
        See Also:
        Constant Field Values
      • ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME

        public static final java.lang.String ORIGINAL_DEFAULT_PERSISTENCE_UNIT_NAME
        Default persistence unit name.
        See Also:
        Constant Field Values
      • logger

        protected final Log logger
    • Constructor Detail

      • DefaultPersistenceUnitManager

        public DefaultPersistenceUnitManager()
    • Method Detail

      • setPersistenceXmlLocation

        public void setPersistenceXmlLocation(java.lang.String persistenceXmlLocation)
        Specify the location of the persistence.xml files to load. These can be specified as Spring resource locations and/or location patterns.

        Default is "classpath*:META-INF/persistence.xml".

      • setPersistenceXmlLocations

        public void setPersistenceXmlLocations(java.lang.String... persistenceXmlLocations)
        Specify multiple locations of persistence.xml files to load. These can be specified as Spring resource locations and/or location patterns.

        Default is "classpath*:META-INF/persistence.xml".

        Parameters:
        persistenceXmlLocations - an array of Spring resource Strings identifying the location of the persistence.xml files to read
      • setDefaultPersistenceUnitRootLocation

        public void setDefaultPersistenceUnitRootLocation(java.lang.String defaultPersistenceUnitRootLocation)
        Set the default persistence unit root location, to be applied if no unit-specific persistence unit root could be determined.

        Default is "classpath:", that is, the root of the current classpath (nearest root directory). To be overridden if unit-specific resolution does not work and the classpath root is not appropriate either.

      • setDefaultPersistenceUnitName

        public void setDefaultPersistenceUnitName(java.lang.String defaultPersistenceUnitName)
        Specify the name of the default persistence unit, if any. Default is "default".

        Primarily applied to a scanned persistence unit without persistence.xml. Also applicable to selecting a default unit from several persistence units available.

        See Also:
        setPackagesToScan(java.lang.String...), obtainDefaultPersistenceUnitInfo()
      • setPackagesToScan

        public void setPackagesToScan(java.lang.String... packagesToScan)
        Set whether to use Spring-based scanning for entity classes in the classpath instead of using JPA's standard scanning of jar files with persistence.xml markers in them. In case of Spring-based scanning, no persistence.xml is necessary; all you need to do is to specify base packages to search here.

        Default is none. Specify packages to search for autodetection of your entity classes in the classpath. This is analogous to Spring's component-scan feature (ClassPathBeanDefinitionScanner).

        Such package scanning defines a "default persistence unit" in Spring, which may live next to regularly defined units originating from persistence.xml. Its name is determined by setDefaultPersistenceUnitName(java.lang.String): by default, it's simply "default".

        Note: There may be limitations in comparison to regular JPA scanning. In particular, JPA providers may pick up annotated packages for provider-specific annotations only when driven by persistence.xml. As of 4.1, Spring's scan can detect annotated packages as well if supported by the given JpaVendorAdapter (e.g. for Hibernate).

        If no explicit mapping resources have been specified in addition to these packages, this manager looks for a default META-INF/orm.xml file in the classpath, registering it as a mapping resource for the default unit if the mapping file is not co-located with a persistence.xml file (in which case we assume it is only meant to be used with the persistence units defined there, like in standard JPA).

        See Also:
        setDefaultPersistenceUnitName(java.lang.String), setMappingResources(java.lang.String...)
      • setMappingResources

        public void setMappingResources(java.lang.String... mappingResources)
        Specify one or more mapping resources (equivalent to <mapping-file> entries in persistence.xml) for the default persistence unit. Can be used on its own or in combination with entity scanning in the classpath, in both cases avoiding persistence.xml.

        Note that mapping resources must be relative to the classpath root, e.g. "META-INF/mappings.xml" or "com/mycompany/repository/mappings.xml", so that they can be loaded through ClassLoader.getResource.

        If no explicit mapping resources have been specified next to packages to scan, this manager looks for a default META-INF/orm.xml file in the classpath, registering it as a mapping resource for the default unit if the mapping file is not co-located with a persistence.xml file (in which case we assume it is only meant to be used with the persistence units defined there, like in standard JPA).

        Note that specifying an empty array/list here suppresses the default META-INF/orm.xml check. On the other hand, explicitly specifying META-INF/orm.xml here will register that file even if it happens to be co-located with a persistence.xml file.

        See Also:
        setDefaultPersistenceUnitName(java.lang.String), setPackagesToScan(java.lang.String...)
      • setSharedCacheMode

        public void setSharedCacheMode(SharedCacheMode sharedCacheMode)
        Specify the JPA 2.0 shared cache mode for all of this manager's persistence units, overriding any value in persistence.xml if set.
        Since:
        4.0
        See Also:
        PersistenceUnitInfo.getSharedCacheMode()
      • setValidationMode

        public void setValidationMode(ValidationMode validationMode)
        Specify the JPA 2.0 validation mode for all of this manager's persistence units, overriding any value in persistence.xml if set.
        Since:
        4.0
        See Also:
        PersistenceUnitInfo.getValidationMode()
      • setDataSources

        public void setDataSources(java.util.Map<java.lang.String,javax.sql.DataSource> dataSources)
        Specify the JDBC DataSources that the JPA persistence provider is supposed to use for accessing the database, resolving data source names in persistence.xml against Spring-managed DataSources.

        The specified Map needs to define data source names for specific DataSource objects, matching the data source names used in persistence.xml. If not specified, data source names will be resolved as JNDI names instead (as defined by standard JPA).

        See Also:
        MapDataSourceLookup
      • setDataSourceLookup

        public void setDataSourceLookup(@Nullable
                                        DataSourceLookup dataSourceLookup)
        Specify the JDBC DataSourceLookup that provides DataSources for the persistence provider, resolving data source names in persistence.xml against Spring-managed DataSource instances.

        Default is JndiDataSourceLookup, which resolves DataSource names as JNDI names (as defined by standard JPA). Specify a BeanFactoryDataSourceLookup instance if you want DataSource names to be resolved against Spring bean names.

        Alternatively, consider passing in a map from names to DataSource instances via the "dataSources" property. If the persistence.xml file does not define DataSource names at all, specify a default DataSource via the "defaultDataSource" property.

        See Also:
        JndiDataSourceLookup, BeanFactoryDataSourceLookup, setDataSources(java.util.Map<java.lang.String, javax.sql.DataSource>), setDefaultDataSource(javax.sql.DataSource)
      • getDataSourceLookup

        @Nullable
        public DataSourceLookup getDataSourceLookup()
        Return the JDBC DataSourceLookup that provides DataSources for the persistence provider, resolving data source names in persistence.xml against Spring-managed DataSource instances.
      • setDefaultDataSource

        public void setDefaultDataSource(@Nullable
                                         javax.sql.DataSource defaultDataSource)
        Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml. This variant indicates no special transaction setup, i.e. typical resource-local.

        In JPA speak, a DataSource passed in here will be uses as "nonJtaDataSource" on the PersistenceUnitInfo passed to the PersistenceProvider, provided that none has been registered before.

        See Also:
        PersistenceUnitInfo.getNonJtaDataSource()
      • getDefaultDataSource

        @Nullable
        public javax.sql.DataSource getDefaultDataSource()
        Return the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      • setDefaultJtaDataSource

        public void setDefaultJtaDataSource(@Nullable
                                            javax.sql.DataSource defaultJtaDataSource)
        Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml. This variant indicates that JTA is supposed to be used as transaction type.

        In JPA speak, a DataSource passed in here will be uses as "jtaDataSource" on the PersistenceUnitInfo passed to the PersistenceProvider, provided that none has been registered before.

        See Also:
        PersistenceUnitInfo.getJtaDataSource()
      • getDefaultJtaDataSource

        @Nullable
        public javax.sql.DataSource getDefaultJtaDataSource()
        Return the JTA-aware DataSource that the JPA persistence provider is supposed to use for accessing the database if none has been specified in persistence.xml.
      • setPersistenceUnitPostProcessors

        public void setPersistenceUnitPostProcessors(@Nullable
                                                     PersistenceUnitPostProcessor... postProcessors)
        Set the PersistenceUnitPostProcessors to be applied to each PersistenceUnitInfo that has been parsed by this manager.

        Such post-processors can, for example, register further entity classes and jar files, in addition to the metadata read from persistence.xml.

      • getPersistenceUnitPostProcessors

        @Nullable
        public PersistenceUnitPostProcessor[] getPersistenceUnitPostProcessors()
        Return the PersistenceUnitPostProcessors to be applied to each PersistenceUnitInfo that has been parsed by this manager.
      • setLoadTimeWeaver

        public void setLoadTimeWeaver(@Nullable
                                      LoadTimeWeaver loadTimeWeaver)
        Specify the Spring LoadTimeWeaver to use for class instrumentation according to the JPA class transformer contract.

        It is not required to specify a LoadTimeWeaver: Most providers will be able to provide a subset of their functionality without class instrumentation as well, or operate with their own VM agent specified on JVM startup. Furthermore, DefaultPersistenceUnitManager falls back to an InstrumentationLoadTimeWeaver if Spring's agent-based instrumentation is available at runtime.

        In terms of Spring-provided weaving options, the most important ones are InstrumentationLoadTimeWeaver, which requires a Spring-specific (but very general) VM agent specified on JVM startup, and ReflectiveLoadTimeWeaver, which interacts with an underlying ClassLoader based on specific extended methods being available on it (for example, interacting with Spring's TomcatInstrumentableClassLoader). Consider using the context:load-time-weaver XML tag for creating such a shared LoadTimeWeaver (autodetecting the environment by default).

        Specified by:
        setLoadTimeWeaver in interface LoadTimeWeaverAware
        Parameters:
        loadTimeWeaver - the LoadTimeWeaver instance (never null)
        See Also:
        InstrumentationLoadTimeWeaver, ReflectiveLoadTimeWeaver
      • getLoadTimeWeaver

        @Nullable
        public LoadTimeWeaver getLoadTimeWeaver()
        Return the Spring LoadTimeWeaver to use for class instrumentation according to the JPA class transformer contract.
      • afterPropertiesSet

        public void afterPropertiesSet()
        Description copied from interface: InitializingBean
        Invoked by the containing BeanFactory after it has set all bean properties and satisfied BeanFactoryAware, ApplicationContextAware etc.

        This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.

        Specified by:
        afterPropertiesSet in interface InitializingBean
      • preparePersistenceUnitInfos

        public void preparePersistenceUnitInfos()
        Prepare the PersistenceUnitInfos according to the configuration of this manager: scanning for persistence.xml files, parsing all matching files, configuring and post-processing them.

        PersistenceUnitInfos cannot be obtained before this preparation method has been invoked.

        See Also:
        obtainDefaultPersistenceUnitInfo(), obtainPersistenceUnitInfo(String)
      • getPersistenceUnitInfo

        @Nullable
        protected final MutablePersistenceUnitInfo getPersistenceUnitInfo(java.lang.String persistenceUnitName)
        Return the specified PersistenceUnitInfo from this manager's cache of processed persistence units, keeping it in the cache (i.e. not 'obtaining' it for use but rather just accessing it for post-processing).

        This can be used in postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo) implementations, detecting existing persistence units of the same name and potentially merging them.

        Parameters:
        persistenceUnitName - the name of the desired persistence unit
        Returns:
        the PersistenceUnitInfo in mutable form, or null if not available
      • postProcessPersistenceUnitInfo

        protected void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui)
        Hook method allowing subclasses to customize each PersistenceUnitInfo.

        The default implementation delegates to all registered PersistenceUnitPostProcessors. It is usually preferable to register further entity classes, jar files etc there rather than in a subclass of this manager, to be able to reuse the post-processors.

        Parameters:
        pui - the chosen PersistenceUnitInfo, as read from persistence.xml. Passed in as MutablePersistenceUnitInfo.
        See Also:
        setPersistenceUnitPostProcessors(org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor...)