복붙노트

[SPRING] PackagesToScan을 검사하는 동안 일부 클래스를 무시하십시오.

SPRING

PackagesToScan을 검사하는 동안 일부 클래스를 무시하십시오.

@Entity로 주석을 달기를 원하는 클래스를 포함하는 패키지 (packagesToScan)가 있습니다.

ApplicationContext 설정을 정의하는 동안 나는 다음과 같이했다.

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

공용 클래스 JpaContext {

... // 기타 구성   ....

@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. ==============================

    1.나는 같은 문제를 해결하기 위해 노력 해왔고 마침내 아래와 같은 해결책을 얻었습니다.

    나는 같은 문제를 해결하기 위해 노력 해왔고 마침내 아래와 같은 해결책을 얻었습니다.

    <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>
    

    내가 포함 할 클래스를 필터링하는 데 사용할 수있는 LocalSessionFactoryBean 클래스에 setEntityTypeFilters 함수가 있음을 알았습니다. 이 예제에서는 RegexPatternTypeFilter를 사용했지만 다른 유형의 필터도 있습니다.

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

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

  2. ==============================

    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");
            }
        });
    
  3. from https://stackoverflow.com/questions/16293437/ignore-some-classes-while-scanning-packagestoscan by cc-by-sa and MIT license