2013-04-30 1 views
11

계속 유지하고자하는 클래스를 포함하는 패키지 (packagesToScan)에 @Entity이라는 주석이 있습니다.PackagesToScan을 스캔하는 동안 일부 클래스를 무시합니다.

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; 

} 

, 나는 (등 없음 기본 키와 같은) 지속성에 대한 요구 사항을 만족하지 않는 packagesToScan 내에서 어떤 수업을했고이 때문에 나는 실행을 허용하고 있지 않다 ApplicationContext 설치가 실패했기 때문에 테스트했습니다.

이제 일부 선택된 클래스 만 검사하거나 일부 클래스를 무시할 수있는 방법이 있습니까? packagesToScan?

+0

엔티티가 완료 될 때까지 @Entity 주석을 제거하거나 주석 처리 할 수 ​​있습니다. 그것은 지속성 제공 업체에 의해 선택되지 않습니다. –

+0

테스트하고 싶은 특정 엔티티 만 스캔 할 수 있습니까? – TheKojuEffect

+0

packagesToScan 옵션을 제거하고 persistence.xml을 만들고 여기에 엔티티를 나열 할 수도 있습니다. 일부 엔티티를 제외하려는 동기를 여전히 이해하지 못합니다. 개발 도중에 엔티티가 완료되지 않았거나 무언가를 놓친 경우 @Entity 주석을 쉽게 제거 할 수 있습니다. –

답변

6

저도 같은 문제를 해결하기 위해 노력하고 최종적으로 아래와 같은 해결책 가지고있다 : 내가 할 수있는 클래스를 필터링하는 데 사용할 수있는 LocalSessionFactoryBean 클래스에 setEntityTypeFilters function 있다는 것을 깨달았다

<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource"/> 
    <property name="packagesToScan" value="com.mycompany.bean"/> 
    <property name="entityTypeFilters" ref="packagesToScanIncludeRegexPattern"> 
    </property> 
    <property name="hibernateProperties"> 
     // ... 
    </property> 
</bean> 

<bean id="packagesToScanIncludeRegexPattern" class="org.springframework.core.type.filter.RegexPatternTypeFilter" > 
    <constructor-arg index="0" value="^(?!com.mycompany.bean.Test).*"/> 
</bean> 

을 포함. 이 예에서는 RegexPatternTypeFilter을 사용했지만 other types of filters도 있습니다.

또한 필터는 포함 방식으로 작동합니다. 의미를 배제하기 위해 변환하려면 정규 표현식에서 부정적인 미리보기를 사용해야했습니다.

이 예제는 xml 구성을 보여 주지만 자바 기반 구성으로 변환하는 것은 간단합니다.

2

나는 비슷한 문제를 발견했습니다. 패키지에서 모든 엔티티가 아닌 일부 엔티티를 추가해야했습니다. 여기에 제가 한 일이 있습니다 :

// 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"); 
     } 
    }); 
관련 문제