此版本仍在开发中,尚未被视为稳定版。如需使用最新的稳定版本,请访问 Spring Data JPA 4.0.4spring-doc.cadn.net.cn

合并持久化单元

Spring 支持拥有多个持久化单元。然而,有时你可能希望对应用程序进行模块化,同时仍确保所有这些模块都在同一个持久化单元内运行。为实现这一行为,Spring Data JPA 提供了一个 PersistenceUnitManager 实现,该实现会根据持久化单元的名称自动合并它们,如下例所示:spring-doc.cadn.net.cn

示例 1. 使用 MergingPersistenceUnitManager
<bean class="….LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitManager">
    <bean class="….MergingPersistenceUnitManager" />
  </property>
</bean>

扫描类路径以查找@Entity 类和 JPA 映射文件

一个普通的 JPA 配置要求所有使用注解映射的实体类都必须在 orm.xml 中列出。XML 映射文件同样适用此规则。Spring Data JPA 提供了一个 ClasspathScanningPersistenceUnitPostProcessor,它可以配置一个基础包,并可选地指定一个映射文件名模式。然后,该处理器会扫描指定包中带有 @Entity@MappedSuperclass 注解的类,加载与文件名模式匹配的配置文件,并将它们传递给 JPA 配置。该后处理器必须按如下方式配置:spring-doc.cadn.net.cn

示例2. 使用 ClasspathScanningPersistenceUnitPostProcessor
<bean class="….LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitPostProcessors">
    <list>
      <bean class="org.springframework.data.jpa.support.ClasspathScanningPersistenceUnitPostProcessor">
        <constructor-arg value="com.acme.domain" />
        <property name="mappingFileNamePattern" value="**/*Mapping.xml" />
      </bean>
    </list>
  </property>
</bean>
从 Spring 3.1 开始,可以在 LocalContainerEntityManagerFactoryBean 上直接配置要扫描的包,以启用对实体类的类路径扫描。详情请参见JavaDoc