web-dev-qa-db-ja.com

春のブーツ。 @DataJpaTest H2組み込みデータベース作成スキーマ

特定のスキーマに格納されているデータレイヤーのエンティティがいくつかあります。例えば:

_@Entity
@Table(name = "FOO", schema = "DUMMY")
public class Foo {}
_

データ層の統合テスト用にH2組み込みデータベースをセットアップしようとしています。テストに_@DataJpaTest_アノテーションを使用して、H2組み込みデータベースを自動的に構成しています。ただし、DBの初期化時にスキーマDUMMYが作成されないため、テーブルの作成は失敗します。

テストケースでテーブルを作成する前にスキーマを作成する方法に関するアイデアはありますか?

@Sql(statements = "CREATE SCHEMA IF NOT EXISTS DUMMY")を使用しようとしましたが、成功しませんでした。

また、_spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY_ファイルにTestPropertySource("classpath:test.properties")と一緒に_test.properties_を設定しようとしましたが、それも機能しませんでした。

17
StasKolodyuk

同じ問題がありましたが、コンテンツを含むschema.sql(resourcesフォルダー内)を作成して解決できました

CREATE SCHEMA IF NOT EXISTS <yourschema>

ドキュメンテーションは見つかります here しかし、実際の例がないために、非常に複雑になっています。警告:このスクリプトは、通常の(テストではない)環境でも実行されます。

必須ではありませんが、テストスコープでのみh2依存関係を追加することをお勧めします

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>test</scope>
</dependency>
18
David Canós

数時間の苦労の後、私は回避策を見つけました。

_spring.jpa.properties.hibernate.default_schema = DUMMY_で_application.properties_を定義できます。

次に_spring.jpa.properties.hibernate.default_schema =_に_test.properties_を設定し、@TestPropertySource("classpath:test.properties")と一緒に使用します

したがって、この方法では、スキーマDUMMYは作成されず、エンティティはデフォルトのスキーマに作成されます。

2
StasKolodyuk