org.springframework.orm.jpa

Class LocalContainerEntityManagerFactoryBean

    • Constructor Detail

      • LocalContainerEntityManagerFactoryBean

        public LocalContainerEntityManagerFactoryBean()
    • Method Detail

      • setPersistenceXmlLocation

        public void setPersistenceXmlLocation(java.lang.String persistenceXmlLocation)
        Set the location of the persistence.xml file we want to use. This is a Spring resource location.

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

        NOTE: Only applied if no external PersistenceUnitManager specified.

        Parameters:
        persistenceXmlLocation - a Spring resource String identifying the location of the persistence.xml file that this LocalContainerEntityManagerFactoryBean should parse
        See Also:
        setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
      • setPersistenceUnitRootLocation

        public void setPersistenceUnitRootLocation(java.lang.String defaultPersistenceUnitRootLocation)
        Set a persistence unit root location for the default persistence unit.

        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.

        NOTE: Only applied if no external PersistenceUnitManager specified.

        Since:
        4.3.3
        See Also:
        DefaultPersistenceUnitManager.setDefaultPersistenceUnitRootLocation(java.lang.String)
      • 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).

        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, Spring's setup 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: Only applied if no external PersistenceUnitManager specified.

        Parameters:
        packagesToScan - one or more base packages to search, analogous to Spring's component-scan configuration for regular Spring components
        See Also:
        setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager), DefaultPersistenceUnitManager.setPackagesToScan(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, Spring's setup 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.

        NOTE: Only applied if no external PersistenceUnitManager specified.

        See Also:
        setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager), DefaultPersistenceUnitManager.setMappingResources(java.lang.String...)
      • setDataSource

        public void setDataSource(javax.sql.DataSource dataSource)
        Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database. This is an alternative to keeping the JDBC configuration in persistence.xml, passing in a Spring-managed DataSource instead.

        In JPA speak, a DataSource passed in here will be used as "nonJtaDataSource" on the PersistenceUnitInfo passed to the PersistenceProvider, as well as overriding data source configuration in persistence.xml (if any). Note that this variant typically works for JTA transaction management as well; if it does not, consider using the explicit setJtaDataSource(javax.sql.DataSource) instead.

        NOTE: Only applied if no external PersistenceUnitManager specified.

        See Also:
        PersistenceUnitInfo.getNonJtaDataSource(), setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
      • setJtaDataSource

        public void setJtaDataSource(javax.sql.DataSource jtaDataSource)
        Specify the JDBC DataSource that the JPA persistence provider is supposed to use for accessing the database. This is an alternative to keeping the JDBC configuration in persistence.xml, passing in a Spring-managed DataSource instead.

        In JPA speak, a DataSource passed in here will be used as "jtaDataSource" on the PersistenceUnitInfo passed to the PersistenceProvider, as well as overriding data source configuration in persistence.xml (if any).

        NOTE: Only applied if no external PersistenceUnitManager specified.

        See Also:
        PersistenceUnitInfo.getJtaDataSource(), setPersistenceUnitManager(org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager)
      • setLoadTimeWeaver

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

        It is a 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 VM agent specified on JVM startup.

        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.

        NOTE: As of Spring 2.5, the context's default LoadTimeWeaver (defined as bean with name "loadTimeWeaver") will be picked up automatically, if available, removing the need for LoadTimeWeaver configuration on each affected target bean. Consider using the context:load-time-weaver XML tag for creating such a shared LoadTimeWeaver (autodetecting the environment by default).

        NOTE: Only applied if no external PersistenceUnitManager specified. Otherwise, the external PersistenceUnitManager is responsible for the weaving configuration.

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

        protected PersistenceUnitInfo determinePersistenceUnitInfo(PersistenceUnitManager persistenceUnitManager)
        Determine the PersistenceUnitInfo to use for the EntityManagerFactory created by this bean.

        The default implementation reads in all persistence unit infos from persistence.xml, as defined in the JPA specification. If no entity manager name was specified, it takes the first info in the array as returned by the reader. Otherwise, it checks for a matching name.

        Parameters:
        persistenceUnitManager - the PersistenceUnitManager to obtain from
        Returns:
        the chosen PersistenceUnitInfo