6

我在我的數據層中存儲了特定模式中的幾個實體。例如:春季啓動。 @DataJpaTest H2嵌入式數據庫創建模式

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

我試圖設置H2嵌入式數據庫,用於集成測試我的數據層。 我爲我的測試使用@DataJpaTest註釋來自動配置H2嵌入式數據庫。但是,創建表失敗,因爲架構DUMMY未在數據庫初始化時創建。

有關如何在測試用例創建表之前創建模式的任何想法?我試過使用@Sql(語句=「創建模式如果不存在虛擬」),但沒有成功。

此外,我試圖在我的test.properties文件中設置spring.datasource.url = jdbc:h2:mem:test;INIT=CREATE SCHEMA IF NOT EXISTS DUMMY文件以及TestPropertySource("classpath:test.properties"),但那不起作用。

回答

4

我有同樣的問題,我設法通過與內容創建schema.sql文件(在資源文件夾)

CREATE SCHEMA IF NOT EXISTS <yourschema>

文檔來解決,可以發現here但恕我直言,缺乏實際的例子使它非常複雜。 警告:此腳本也在正常(未測試)環境中執行。

不是強制性的,但良好的做法,只有在測試範圍

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

感謝您的回覆。有用!順便說一句,很好的捕捉依賴範圍。 – StasKolodyuk

+0

另外,我發現了另一個解決這個問題的方法,只是忘記了放在這裏。 – StasKolodyuk

+0

事實證明,你可以把'schema.sql'放在src/test/resources'下面,只將它應用於測試 – StasKolodyuk

1

添加H2依賴幾個小時的掙扎,我找到了一個解決辦法之後。您可以在application.properties中定義spring.jpa.properties.hibernate.default_schema = DUMMY

,然後在test.properties設置spring.jpa.properties.hibernate.default_schema =@TestPropertySource("classpath:test.properties")

所以綜合起來使用,這樣的模式DUMMY將不會創建和實體將在默認架構中創建。