6

私は、特定のスキーマに格納されたデータレイヤー内にいくつかのエンティティを持っています。例:スプリングブート。 @DataJpaTest H2組み込みデータベースの作成スキーマ

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

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

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

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

また、私はファイルにspring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMYTestPropertySource("classpath:test.properties")と一緒に設定しようとしましたが、これもうまくいきませんでした。

答えて

4

私は同じ問題を持っていた、私は

CREATE SCHEMA IF NOT EXISTS <yourschema>

コンテンツで(リソースフォルダ内)schema.sqlを作成することによって解決するために管理マニュアルhereを見つけることができますが、私見実例の欠如は、それを作ります非常に複雑です。 警告:このスクリプトは通常の(テストではない)環境でも実行されます。必須、良いプラクティスではありません

、私は回避策を見つけた苦労の数時間後にのみ、テスト範囲

<dependency> 
    <groupId>com.h2database</groupId> 
    <artifactId>h2</artifactId> 
    <scope>test</scope> 
</dependency> 
+0

返信ありがとうございます。できます!ところで、依存関係の範囲についての良いキャッチ。 – StasKolodyuk

+0

また、私はこの問題のための別の解決策を見つけました。ちょうどここに配置するのを忘れました。 – StasKolodyuk

+0

'src/test/resources'の下に' schema.sql'を置くことで、テストのためだけにそれを適用することができました – StasKolodyuk

1

でH2依存関係を追加します。

application.propertiesspring.jpa.properties.hibernate.default_schema = DUMMYを定義することができます。その後、

そして、あなたのtest.propertiesspring.jpa.properties.hibernate.default_schema =を設定し、そう@TestPropertySource("classpath:test.properties")

と一緒に使用し、このようにスキーマDUMMYが作成されず、エンティティは、デフォルトのスキーマに作成されます。

関連する問題