特定のスキーマに格納されているデータレイヤーのエンティティがいくつかあります。例えば:
_@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
_を設定しようとしましたが、それも機能しませんでした。
同じ問題がありましたが、コンテンツを含むschema.sql(resourcesフォルダー内)を作成して解決できました
CREATE SCHEMA IF NOT EXISTS <yourschema>
ドキュメンテーションは見つかります here しかし、実際の例がないために、非常に複雑になっています。警告:このスクリプトは、通常の(テストではない)環境でも実行されます。
必須ではありませんが、テストスコープでのみh2依存関係を追加することをお勧めします
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
数時間の苦労の後、私は回避策を見つけました。
_spring.jpa.properties.hibernate.default_schema = DUMMY
_で_application.properties
_を定義できます。
次に_spring.jpa.properties.hibernate.default_schema =
_に_test.properties
_を設定し、@TestPropertySource("classpath:test.properties")
と一緒に使用します
したがって、この方法では、スキーマDUMMYは作成されず、エンティティはデフォルトのスキーマに作成されます。