我設法將Liquibase整合到我們的Maven版本中,用一些enrys初始化H2內存數據庫。這些行具有使用按預期工作的序列表生成的主鍵(BigInt從1開始遞增的值)。Liquibase + H2 + Junit初始密鑰序列從
我的問題是,當我嘗試從一個Junit集成測試中將一個新實體持久存儲到該表中時,我得到一個「唯一鍵約束違規」,因爲該新實體具有與使用插入的第一行相同的主鍵Liquibase changelog-xmls。
因此,初始化如預期的那樣完美地工作。 Maven構建使用liquibase changelog-xmls
現在我只是在使用自己的Runner進行任何集成測試之前完全清除相應的表......但這不會成爲可能。它目前對於調查這些問題非常棘手,因爲目前還沒有關於Liquibase的具體信息。
更新解決方法
ID則使用H2帶來了,以下變更不會工作,因爲不支持所需minValue(最小值)問題下面喜歡回答。
<changeSet author="liquibase-docs" id="alterSequence-example">
<alterSequence
incrementBy="1"
maxValue="371717"
minValue="40"
ordered="true"
schemaName="public"
sequenceName="seq_id"/>
作爲一種簡單的解決方法我現在只是刪除現有的序列用於插入我的TESTDATA在第二變更:
<changeSet id="2" author="Me">
<dropSequence
sequenceName="SEQ_KEY_MY_TBL"/>
<createSequence
sequenceName="SEQ_KEY_MY_TBL"
incrementBy="1"
startValue="40"/>
</changeSet>
這樣的changelog-配置的值* .xml將使用初始值爲1的序列插入。我插入30行,以便使用Keys 1-30。之後,該序列被刪除並用更高的startValue重新創建。通過這種方式,當從基於Junit的集成中持久化實體時,新實體將具有從40開始的主鍵,並解決以前的唯一約束問題。
由於相應的修補程序已經存在,因此不會H2可能很快發佈支持minValue/maxValue的版本。
更新:
也許我們應該提到這一點,還是僅僅是一個解決辦法,任何人都知道,如果H2支持與Liquibase的序列DB-初始化之後不會重新開始嗎?
感謝您的輸入,聽起來不錯,但不幸的是似乎不支持H2(minValue ...)。瞬間!不知道如果我找出一種方法來做到這一點... – JBA
我想出了一個簡單的H2解決方法,通過刪除序列並創建一個具有更高開始值的新建議,現在一切正常。非常感謝! – JBA