扫描PackagesToScan时忽略某些类

时间:2013-04-30 06:18:47

标签: spring spring-data spring-data-jpa applicationcontext

我有一个包(说packagesToScan)包含我希望用@Entity注释的类。

在定义ApplicationContext配置时,我完成了以下操作。


@Configuration
@EnableJpaRepositories("packagesToScan")
@EnableTransactionManagement
@PropertySource("server/jdbc.properties")
@ComponentScan("packagesToScan")

public class JpaContext {

... // Other configurations ....

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
    emf.setDataSource(this.dataSource());
    emf.setJpaVendorAdapter(this.jpaVendorAdapter());
    emf.setPackagesToScan("packagesToScan");
    emf.setJpaProperties(this.hibernateProperties());
    return emf;

 }

在开发过程中,我在@Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean(); emf.setDataSource(this.dataSource()); emf.setJpaVendorAdapter(this.jpaVendorAdapter()); emf.setPackagesToScan("packagesToScan"); emf.setJpaProperties(this.hibernateProperties()); return emf; } 中有一些不满足持久性要求的类(比如没有主键等),因此我不允许因为{{1}而运行测试设置失败。

现在, 有什么方法可以扫描某些选定的课程或忽略packagesToScan中的某些课程?

1 个答案:

答案 0 :(得分:4)

我偶然发现了一个类似的问题。我需要从包中添加一些但不是所有实体。我是这样做的:

// add all entities from some package
localContainerEntityManagerFactoryBean.setPackagesToScan("com.companyname.model");
// add only required enitites from a libray
localContainerEntityManagerFactoryBean.setPersistenceUnitPostProcessors(new PersistenceUnitPostProcessor() {
        @Override
        public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo persistenceUnit) {
            persistenceUnit.addManagedClassName("com.companyname.common.model.SomeEntityName");
        }
    });