1

私は(しばらくJPAに触れずに)Hibernate 4.1、JPA2、およびSpringを使用してプロジェクトを開始しました。これは、共通のライフ サイクルを持つ Maven プロジェクトです。

mvn test を実行すると、必要なデータベース オブジェクトが見つからないという期待される結果が得られます (接続は期待どおりに成功します)。しかし、私のすべての研究と実験は、ありふれた状況と思われるものを作るのに十分ではないことを証明しました。

  • 単体テストの実行中に、スキーマをローカル開発データベースにドロップ/作成できると期待しています。hibernate3-maven-plugin (理想的にはバージョン 3.0) がこれを処理するはずだと想像しましたが、うまく動作させることができませんでした。データの自動挿入は期待していません (これには DBUnit を使用するか、各テストで独自のテスト データを生成することをお勧めしますが、ここでは役割を果たしません) が、スキーマがテスト データベースで更新されることを期待しています。注釈付きモデル クラスの現在の状態を反映しています。これは process-test-resources フェーズにバインドされると思います。

  • (現在の) スキーマ定義を使用して (または一連の) sql ファイルを生成することを期待していますが、得られた最良の結果は、ここで説明されている問題を反映しています: Maven + Spring + Hibernate: hibernate3-maven-plugin hbm2ddl fails for reason "Caused by : java.lang.NullPointerException" (これまでのところ解決策はありません)。

何かばかげたことを見逃しているのでしょうか、それとも現時点では本当に不可能なのでしょうか? どなたか提供していただけると嬉しいです

  • これを達成する方法の適切な文書化

  • hibernate 4 を使用した実際の例

  • 他の戦略で私の目標を達成するための実用的な方法のガイドライン。

関連性がある場合、データベースは Postgres 9.1 です。

前もって感謝します。

4

2 に答える 2

2

それを行う 1 つの方法は、Arquillianを使用することです。persistence.xml独自のデータソースを使用して、各テストまたは一連のテストに対して個別の展開パッケージを作成できます。hbm2dllの設定を使用してpersistence.xml、スキーマの作成と削除または更新を行います。

<property name="hibernate.hbm2ddl.auto" value="create-drop" />

import.sqlデータベースを事前設定する場合は、アプリケーションの起動時に hibernate によって実行されるデプロイメントに を追加するか、 Arquillian Persistence 拡張機能を使用できます。

例として、完全な arquillian テストのセットアップを次に示します。

@RunWith(Arquillian.class)
public class MyTest {

    @Deployment
    public static Archive<?> createTestArchive() {

        return ShrinkWrap.create(WebArchive.class, "myTest.war")
                .addPackages(true, "com.example")
                .addAsResource("testSeeds/seed.sql", "import.sql")
                .addAsResource("in-mem-persistence.xml", "META-INF/persistence.xml")
                .addAsWebInfResource("in-mem-datasource.xml");
    }

1 つの欠点は、コンテナー内テストが単純な単体テストよりも遅くなることです。

Arquillian が Spring とうまく連携できるかどうかはわかりません。Java EE アプリケーションでしか使用していないので、何か役立つかどうか教えてください。

于 2013-02-15T08:48:04.820 に答える
0

再び私自身の質問への答え。

私が望んでいた結果を達成するには、プロセスクラスフェーズでの hibernate3-maven-plugin の hbm2ddl の実行と、プロセステストリソースフェーズでの sql-maven-plugin の別の実行を maven で連鎖させる必要がありました。1 つ目は Hibernate のモデルの sql を生成し、2 つ目はそれをデータベースに適用します。

後知恵では、実際には適切でクリーンなソリューションのようです。

Hibernate モデルから maven を使用してテストするためのデータベースをセットアップするという目標を達成するために、私のソリューションと異なる場合は、ベスト プラクティスを知りたいと思っています。

于 2013-03-10T21:27:01.797 に答える