2014-06-22 4 views
0

많은 프로젝트가있는 Eclipse 작업 공간이 있습니다. 하나의 프로젝트 "shareddata"에는 모든 jpa 엔티티, 서비스, persistence.xml (스프링 데이터 사용) 등이 포함되어 있습니다. 내 다른 프로젝트에서는 필자의 maven pom.xml에 "shareddata"를 종속성으로 포함 시켰습니다.동적으로 hbm2ddl.auto를 비활성화 하시겠습니까?

다른 프로젝트 중 하나를 시작하면 jpa/hibernate가 데이터베이스 테이블의 유효성을 검사하고 업데이트합니다 (hbm2ddl.auto = true). 이것은 잘 작동합니다.

하지만 내 전체 프로젝트를 테스트하여 "공유 데이터"프로젝트가 포함 된 여러 프로젝트를 시작하십시오. 그래서 모든 단일 프로젝트가 데이터베이스 테이블의 유효성을 검사하고 업데이트합니다. 이것은 꽤 시간이 걸립니다.

하나의 프로젝트에만 "hbm2ddl.auto"를 활성화 할 수 있습니까? 또는 응용 프로그램 시작시 "hbm2ddl.auto"를 동적으로 비활성화 할 수 있습니까?

그게 가능하다면 jms 서버 프로젝트를 시작하고 데이터베이스 유효성 검사를 할 수 있습니다. 다음으로는 다른 프로젝트 (Tomcat 및 여러 서버 응용 프로그램)를 시작하고 데이터베이스 유효성 검사를 수행하지 않습니다.

은 내게 시스템 등록 정보를 통해 같은 일을했다

답변

1

:-) 많은 시간을 저장합니다. 불행히도 나는 어떻게 당신이 최대 절전 모드를 초기화하는지 모른다. 나는 개인적으로 ${propName} 구문을 사용하는 시스템 속성을 지원하는 Spring을 통해이 작업을 수행했습니다. 이 표기법을 사용할 수 있다면 구성 파일에서 사용하고 단위 테스트를 시작할 때 적절한 속성을 설정하십시오.

+0

환호성을 보내면 jpa가 초기화 된 곳이 보였습니다. 어디서나 동일한 xml을 사용하고 실제로 실제로 무엇을했는지 보지 않아서 항상 효과가있었습니다. 결국 LocalContainerEntityManagerFactoryBean이 초기화를 수행한다는 것을 알게되었습니다. 나는 세부 사항을 가진 응답을 배치 할 것이다. – TinusSky

0

알아 내기에는 다소 시간이 걸렸지 만 jpa는 내 applicationContext.xml (또는 root-context.xml과 같은 변형)에서 구성됩니다. LocalContainerEntityManagerFactoryBean은 초기화를 수행합니다.

Lucky LocalContainerEntityManagerFactoryBean은 persistence.xml에 설정된 값을 무시하는 매개 변수를 허용합니다. 그래서 난의 persistence.xml에 없음으로 hibernate.hbm2ddl.auto 설정하고 특정 프로젝트에 대한 hibernate.hbm2ddl.auto을 사용하려면 다음 XML을 사용

<!-- Add JPA support --> 
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="loadTimeWeaver"> 
     <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" /> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.hbm2ddl.auto">update</prop> 
     </props> 
    </property> 
</bean> 

희망이 같은 문제를 가진 사람을 도움이 될 수 있습니다.

관련 문제