複数のデータベース ベンダーのサポートを利用した Java/Maven/JPA/Hibernate ビルドの最適なアプローチは?

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

質問

単一のデータベースを使用するエンタープライズ アプリケーションがありますが、アプリケーションは以下をサポートする必要があります。 mysql, オラクル, 、 そして SQLサーバー インストールオプションとして。

をしようとすること ポータブルなまま 私たちは使っています JPA アノテーション休止状態 実装として。また、開発のために実行されている各データベースのテストベッド インスタンスもあります。

アプリは順調に構築されています メイビン で遊んでみました hibernate3-maven-プラグイン また、特定のデータベース言語の DDL を自動生成できます。

個々の開発者が 3 つのデータベースすべてに対して簡単にテストでき、Hudson ベースの CI サーバーが適切に構築できるようにするには、これに取り組む最善の方法は何でしょうか。

すなわち:

  1. 私は思った hbm2ddl でのゴール スキーマファイルを生成するだけですが、 しかし、どうやらライブデータベースに接続してスキーマを作成しようとしているようです. 。これを得る方法はありますか スキーマファイルを作成するだけです データベース方言ごとに それなし データベースに接続していますか?

  2. もし hibernate3-maven-プラグイン 実際にデータベース スキーマを作成するよう要求されていますが、スキーマを作成する前にデータベースを削除して再作成する方法はありますか?

  3. 私は、各開発者 (および Hudson ビルド マシン) が各データベース サーバー上に独自の個別のデータベースを持つべきだと考えています。これは典型的なことでしょうか?

  4. 開発者は Maven を 3 回実行する必要があるでしょうか...各データベースベンダーごとに 1 回ずつ?その場合、ビルド マシン上で結果をマージするにはどうすればよいですか?

  5. があります hbm2doc hibernate3-maven-plugin 内の目標。これを 3 回実行するのはやりすぎのように思えます...各データベースでほぼ同一であると信じなければなりません。

役に立ちましたか?

解決

  

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のプラグは、実際にデータベーススキーマを作成する上で主張した場合、それはデータベースを削除し、スキーマを作成する前にそれを再作成持っている方法はありますか?

上記を参照してください。しかし、念のため、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)私は、各開発者(およびハドソンのビルドマシンが)それぞれのデータベース・サーバ上の自分の別のデータベースを持っているべきであると考えています。これは典型的ですか?

はい、私は、開発者ごとのデータベース・インスタンス使用を参照してください(ベストプラクティスとしてこれを考えます)。

  

4)開発者は、一度、各データベースベンダーのために... Mavenの3回実行する必要がありますか?もしそうなら、どのように私は、ビルドマシン上で結果をマージしますか?

はい、非常に可能性が高いと私は、各データベースのプロファイルを使用します。ビルドマシン上で、私は

  

5)Hibernate3の-のMavenプラグイン内-hbm2docの目標があります。私がそれは、データベースごとにほぼ同じだろうと信じなきゃ...この3回を実行するためにやり過ぎと思われる。

私は、このツールに慣れていないが、私は(例えば、主キーの生成と)出力のいくつかの小さな変動があるかもしれませんね。私は、各データベースのスキーマドキュメントを生成するだろうが、リリース時にのみ(各ビルドであることを実行する必要は確かにありません)。

scroll top