2011-05-04 2 views
3

우리는 기준선을 분리하고 있습니다 (릴리스 1.0 및 2.0 동시 개발 용). 별도의 두 데이터베이스 (및 하드웨어)를 유지 관리하는 대신 다른 대안을 조사하고 있습니다. 우리는 동일한 데이터베이스 인스턴스를 사용할 수, 그리고 두 개의 서로 다른 스키마의 테이블/데이터의 중복 사본이있는 것 :JPA orm.xml에 속성을 주입 하시겠습니까?

1.0 : SCHEMA_1
2.0 : SCHEMA_2

JPA의 orm.xml 파일에 스키마가 지정된 속성이 있습니다.

<schema>SCHEMA_1</schema> 

제 질문은 하드 코딩 된 스키마 이름 (및 방법) 대신 속성을 삽입 할 수 있는지 여부입니다. 우리가 .properties 파일이있는 경우

예를 들어, 다음과 같이 파일 :

<SCHEMA>schema.name</SCHEMA> 

감사에 대한 :

schema.name=SCHEMA_1 

우리는 다음과 같이 orm.xml 파일에 schema.name을 사용할 수 어떤 도움이라도! 스키마를 동적으로 만드는 다른 방법도 환영합니다.

답변

2

우리는 빌드 타임에 스키마에 대한 태그를 대체하는 속도-받는다는 - 플러그인을 사용하여 끝났다. orm.xml 템플릿에서

다음 POM 파일에서

<schema>${schemaName}</schema> 

:

내가 정확한 문제에 직면했습니다
 <plugin> 
     <groupId>net.rumati.maven.plugins</groupId> 
     <artifactId>velocity-maven-plugin</artifactId> 
     <version>0.1.1</version> 
     <executions> 
      <execution> 
       <id>replaceSchema</id> 
       <phase>generate-sources</phase> 
       <goals> 
       <goal>velocity</goal> 
       </goals> 
      </execution> 
     </executions> 
     <configuration> 
      <template>${basedir}/src/main/resources/hibernate/template/orm.xml</template> 
      <properties> 
      <schemaName>${r1Schema}</schemaName> 
      </properties> 
      <outputFile>${basedir}/src/main/resources/hibernate/orm.xml</outputFile> 
     </configuration> 
    </plugin> 
3

JPA는 orm.xml에서만이를 정의합니다. 당신이 코드에서 당신은 EclipseLink 세션에서이를 설정하는 SessionCustomizer를 사용할 수는 EclipseLink에서

,

session.getLogin().setTableQualifier("SCHEMA_1"); 
+0

제안 해 주셔서 감사합니다. – Nathan

2

. orm.xml을 프로젝트에 빌드하는 대신 아티팩트 빌드에서 제외 시키십시오. 그런 다음 실행시에,이 집어 그래서 응용 프로그램의 클래스 경로에 넣어 : 응용 프로그램의

<persistence-unit-metadata> 
    <persistence-unit-defaults> 
     <schema>MySchemaThatsBeenDeterminedAtRuntime</schema> 
    </persistence-unit-defaults> 
</persistence-unit-metadata> 

각 인스턴스는 다른 스키마에 자신의 orm.xml 및 포인트입니다 수 있습니다.

관련 문제