Лучший подход для Java / Maven / JPA / Hibernate Build с несколькими видами поставщика баз данных?

StackOverflow https://stackoverflow.com/questions/2832001

Вопрос

У меня есть корпоративное приложение, которое использует одну базу данных, но приложение необходимо поддерживать mysql., оракуль, и SQL * Server. Как варианты установки.

Попытаться оставаться портативным Мы используем Аннотации jpa с Гибернат как реализация. У нас также есть экземпляр тестовой кровати каждой базы данных для разработки.

Приложение красиво строит в Мавана и я играл с Hibernate3-Maven-плагин и может автоматически генерировать DDL для заданного диалекта базы данных.

Как лучше подходить к этому, чтобы отдельные разработчики могли легко протестировать против всех трех баз данных, и наш сервер CI HUDSON может правильно создавать вещи.

Более конкретно:

  1. Я думал hbm2ddl. Цель в просто генерирует файл схемы, Но, очевидно, он подключается к живой базе данных и попытки создать схему. Отказ Есть ли способ иметь это просто создайте файл схемы Для каждой базы данных диалект без Подключение к базе данных?

  2. Если то Hibernate3-Maven-плагин Настаивает на самом деле создание схемы базы данных, есть ли способ, чтобы он бросить базу данных и воссоздать его перед созданием схемы?

  3. Я думаю, что каждый разработчик (и машина сборки HUDSON) должен иметь собственную отдельную базу данных на каждом сервере базы данных. Это типично?

  4. Будут ли разработчики придется запустить Maven три раза ... Один раз для каждого поставщика баз данных? Если это так, как мне объединить результаты на сборку?

  5. Существует hbm2doc. Целью в виде Hibernate3-Maven-Plugin. Кажется, что излишки запускают это три раза ... Я должен поверить, что это будет почти идентично для каждой базы данных.

Это было полезно?

Решение

1) Есть ли способ иметь это просто создать файл схемы для каждой диалект базы данных без подключения к базе данных?

Набор export к false. Отказ Что-то вроде этого:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>false</export><!-- do not export to the database -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
</plugin>

2) Если Hibernate3-Maven-Plug настаивает на фактическом создании схемы базы данных, есть ли способ, чтобы он бросить базу данных и воссоздать его перед созданием схемы?

Увидеть выше. Но на всякий случай, для этого набора update к true:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>hibernate3-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <components>
      <component>
        <name>hbm2ddl</name>
        <implementation>annotationconfiguration</implementation>
      </component>
    </components>
    <componentProperties>
      <export>true</export>
      <update>true</update><!-- update the schema -->
      <drop>true</drop>
      <configurationfile>src/main/resources/hibernate.cfg.xml</configurationfile>
      <outputfilename>my_schema.ddl</outputfilename>
    </componentProperties>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derbyclient</artifactId>
      <version>10.5.3.0_1</version>
    </dependency>
  </dependencies>
</plugin>

3) Я думаю, что каждый разработчик (и машина сборки HUDSON) должен иметь собственную отдельную базу данных на каждом сервере базы данных. Это типично?

Да, и я считаю это как лучшую практику (см. Используйте один экземпляр базы данных на разработчик).

4) Будут ли разработчики придется запустить Maven три раза ... Один раз для каждого поставщика баз данных? Если это так, как мне объединить результаты на сборку?

Да, очень вероятно, и я бы использовал профили для каждой базы данных. На строительной машине я бы построить матричный проект.

5) Есть цель HBM2DOC в Hibernate3-Maven-Plugin. Кажется, что излишки запускают это три раза ... Я должен поверить, что это будет почти идентично для каждой базы данных.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top