2014-10-31 54 views
0

我開始在我的春季託管java項目中使用飛路(我也在使用休眠)。由於唯一索引或主鍵違規,飛行路徑遷移失敗

我跟着flyway的文檔。我也配置了maven插件,並且一切正常。

試圖使用Maven插件做乾淨的,初始化和遷移,一切正常。

相反,如果我嘗試運行我的應用程序(其中我已經在我的飛行用豆):

<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

我看到:

  • 分貝的方案中創建
  • 創建schema_version表
  • 我的腳本創建整個db工作原理

Unfortunally我的應用程序無法啓動,由於在遷移過程中的錯誤,我不明白:

31/10/2014 11:03:34 INFO DbSupportFactory:43 - Database: jdbc:h2:~/db/db (H2 1.4) 
31/10/2014 11:03:34 INFO DbValidate:43 - Validated 1 migration (execution time 00:00.015s) 
31/10/2014 11:03:34 INFO MetaDataTableImpl:43 - Creating Metadata table: "PUBLIC"."schema_version" 
31/10/2014 11:03:34 INFO DbMigrate:43 - Current version of schema "PUBLIC": << Empty Schema >> 
31/10/2014 11:03:34 INFO DbMigrate:43 - Migrating schema "PUBLIC" to version 3.0.0 
31/10/2014 11:03:34 ERROR ContextLoader:331 - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in ServletContext resource [/WEB-INF/spring/app-jpa-config.xml]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Unable to insert row for version '3.0.0' in metadata table "PUBLIC"."schema_version" 
... 
... 
... 
Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY_KEY_6 ON PUBLIC.""schema_version""(""version"") VALUES (/* 3 */ CAST('3.0.0' AS VARCHAR_IGNORECASE))"; SQL statement: 
INSERT INTO "PUBLIC"."schema_version" ("version_rank","installed_rank","version","description","type","script","checksum","installed_by","execution_time","success") VALUES (?, ?, ?, ?, ?, ?, ?, USER(), ?, ?) [23505-182] 

所以似乎重複異常,但它是很奇怪的。這之後,我看到了db和似乎總是正確的:

  • schema_versione包含兩行:飛行用init和我的腳本具有版本3.0.0
  • 我看到整個數據庫中創建

所以我的問題是:什麼是錯的? flyway試圖進行兩次遷移?

謝謝

回答

0

我解決了這個問題。最後是一個愚蠢的問題:在我的SQL腳本中也有創建schema_version。當然這是一個錯誤。

在腳本中刪除該部分一切正常!