Вставить свойство в JPA orm.xml? - PullRequest
3 голосов
/ 05 мая 2011

Мы разделяем нашу базовую линию (для одновременной разработки версий 1.0 и 2.0).Вместо того, чтобы поддерживать две отдельные базы данных (и оборудование), мы исследуем другие альтернативы.Мы хотели бы иметь возможность использовать один и тот же экземпляр базы данных и иметь дублированные копии таблиц / данных в двух разных схемах:

1.0: SCHEMA_1
2.0: SCHEMA_2

В файле JPA orm.xml есть свойство, в котором указана схема:

<schema>SCHEMA_1</schema>

Мой вопрос заключается в том, можно ли внедрить свойство вместо жестко закодированного имени схемы (и как).

Например, если у нас есть файл .properties со следующим:

schema.name=SCHEMA_1

Можем ли мы затем использовать schema.name в файле orm.xml следующим образом:

<SCHEMA>schema.name</SCHEMA>

Спасибоза любую помощь!Также приветствуются другие альтернативы для создания динамической схемы.

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

JPA определяет это только в файле orm.xml.

В EclipseLink вы можете использовать SessionCustomizer, чтобы установить это на вашем EclipseLink Session в коде,

session.getLogin().setTableQualifier("SCHEMA_1");
2 голосов
/ 09 июля 2012

Я столкнулся с точной проблемой. Вместо встраивания orm.xml в проект, оставьте его вне сборки артефакта. Затем во время выполнения поместите его в путь к классу приложения, чтобы он поднялся:

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

Каждый экземпляр приложения может иметь свой собственный файл orm.xml и указывать на другую схему.

2 голосов
/ 06 мая 2011

В итоге мы использовали плагин speed-maven для замены тегов для схемы во время сборки.

В шаблоне orm.xml:

<schema>${schemaName}</schema>

В файле pom:

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