Liquibase主键在H2上创建两次 [英] Liquibase primary key is created twice on H2

查看:119
本文介绍了Liquibase主键在H2上创建两次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在启动问题只有H2数据库。在其他数据库(MySQL)上它可以正常工作,没有任何问题。



由(jHipster)生成的配置:

profile: dev

  spring:
配置文件:
active:dev
datasource:
dataSourceClassName:com.mysql.jdbc.jdbc2.optional.MysqlDataSource
url:jdbc:mysql://******.net:3306 / *** ** _ pandemicd?autoReconnect = true
databaseName:****************
serverName:******。net
username:* ***************
密码:****************
cachePrepStmts:true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit:2048
useServerPrepStmts:true

jpa:
数据库平台:org.hibernate.dialect.MySQL5InnoDBDialect
数据库:MYSQL
openInView:true
show_sql:true
generate-ddl:false
hibernate:
ddl-auto:none
命名策略:org.hibernate.cfg.EJB3NamingStrategy
亲perties:
hibernate.cache.use_second_level_cache:true
hibernate.cache.use_query_cache:false
hibernate.generate_statistics:true
hibernate.cache.region.factory_class:pl.sedzisz.pandemic .config.hazelcast.HazelcastCacheRegionFactory
hibernate.cache.use_minimal_puts:true
hibernate.cache.hazelcast.use_lite_member:true

profile: test (在内存中)

  spring:
datasource:
dataSourceClassName:org.h2.jdbcx.JdbcDataSource
url:jdbc:h2:mem:pandemic; DB_CLOSE_DELAY = -1; MODE = MySQL; TRACE_LEVEL_FILE = 4
databaseName:
serverName:
username:
密码:

jpa:
数据库平台:org.hibernate.dialect.H2Dialect
数据库:H2
openInView:true
show_sql:true
generate-ddl:false
hibernate:
ddl-auto:none
naming-strategy:org。 hibernate.cfg.EJB3NamingStrategy
属性:
hibernate.cache.use_second_level_cache:假
hibernate.cache.use_query_cache:假
hibernate.generate_statistics:假
hibernate.hbm2ddl。 auto:validate

现在Liquibase变更记录:

 < changeSet author =newbieid =1449941926339-1> 
< createTable tableName =ENUM_DESCENT>
< column name =descent_of_diseasetype =VARCHAR(255)>
< constraints nullable =false/>
< / column>
< / createTable>
< / changeSet>

< changeSet author =newbieid =1449941926339-2>
< loadData encoding =UTF-8
file =config / liquibase / descent_of_disease.csv
separator =;
tableName =ENUM_DESCENT/>
< / changeSet>

< changeSet author =newbieid =1449941926339-3>
< createTable tableName =DISEASE_DESCENTS>
< column name =disease_idtype =BIGINT>
< constraints nullable =false/>
< / column>
< column name =descent_descent_of_diseasetype =VARCHAR(255)>
< constraints nullable =false/>
< / column>
< / createTable>
< / changeSet>

< changeSet author =newbieid =1449941926339-4>
< addPrimaryKey columnNames =disease_id,descent_descent_of_disease
constraintName =PRIMARY
tableName =DISEASE_DESCENTS/>
< / changeSet>

< changeSet author =newbieid =1449941926339-5>
< addPrimaryKey columnNames =descent_of_disease
constraintName =PRIMARY
tableName =ENUM_DESCENT/>
< / changeSet>



以及日志样本:

<$ p $ [/ b] [/ b] [/ b] [/ b] [DEBUG] liquibase - 类路径:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:执行EXECUTE数据库命令:ALTER TABLE PUBLIC。 DISEASE_DESCENTS添加CONSTRAINTPRIMARYPRIMARY KEY(disease_id,descent_descent_of_disease)
[INFO] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:主键加入到DISEASE_DESCENTS(disease_id,descent_descent_of_disease)
[INFO] liquibase - 类路径:配置/ liquibase / master.xml:配置/ liquibase /更改日志/ 20151115220815_added_entity_Descent.xml :: 1449941926339-4 ::新手:变更配置/ liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 ::新手在1ms内成功运行
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 201511 15220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:计算校验和为addPrimaryKey:[
columnNames =disease_id,descent_descent_of_disease
constraintName =PRIMARY
tableName =DISEASE_DESCENTS
]作为eb8eba06bfcf2a30a029b8e49ea7d549
[DEBUG] liquibase - 类路径:配置/ liquibase / master.xml:配置/ liquibase /更改日志/ 20151115220815_added_entity_Descent.xml :: 1449941926339-4 ::新手:eb8eba06bfcf2a30a029b8e49ea7d549:7计算的校验和作为212a7c01d41bbcb1f9772a2d93161529
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:执行EXECUTE数据库命令:INSERT INTO PUBLIC.DATABASECHANGELOG(ID, ('1449941926339-4','newbie','config / liquibase / changelog / 20151115220815_added_entity_Descent.xml',NOW(),6,'7(作者,FILENAME,DATEEXECUTED,ORDEREXECUTED,MD5SUM,DESCRIPTION,COMMENTS,EXECTYPE,LIQUIBASE)VALUES :212a7c01d41bbcb 1f9772a2d93161529','addPrimaryKey','','EXECUTED','3.3.2')
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:计算校验和为addPrimaryKey:[
columnNames =disease_id,descent_descent_of_disease
constraintName =PRIMARY
tableName =DISEASE_DESCENTS
] as eb8eba06bfcf2a30a029b8e49ea7d549
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-4 :: newbie:7的计算校验和:eb8eba06bfcf2a30a029b8e49ea7d549:as 212a7c01d41bbcb1f9772a2d93161529
[ DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:运行Changeset:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5: :新手
[DEBUG] liquibase - classpath:co nfig / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:Changeset config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie
[DEBUG ] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:Reading ChangeSet:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:执行语句:liquibase.statement.core.AddPrimaryKeyStatement@7334b84d
[DEBUG] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:执行EXECUTE数据库命令:ALTER TABLE PUBLIC.ENUM_DESCENT ADD CONSTRAINT主要主键(descent_o f_disease)
[错误] liquibase - classpath:config / liquibase / master.xml:config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 :: newbie:更改设置config / liquibase / changelog / 20151115220815_added_entity_Descent.xml :: 1449941926339-5 ::新手失败。错误:org.h2.jdbc.JdbcSQLException:OgraniczeniePRIMARYjużistnieje
约束PRIMARY已经存在; SQL语句:ALTER TABLE PUBLIC.ENUM_DESCENT ADD CONSTRAINTPRIMARYPRIMARY KEY(descent_of_disease)[90045-187]
liquibase.exception.DatabaseException:org.h2.jdbc.JdbcSQLException:OgraniczeniePRIMARY更新结束
约束PRIMARY已经存在; SQL语句:ALTER TABLE PUBLIC.ENUM_DESCENT在liquibase.executor.jvm.JdbcExecutor $ ExecuteStatementCallback.doInStatement(JdbcExecutor.java:316)〜[liquibase-core-3.3。]上添加CONSTRAINTPRIMARYPRIMARY KEY(descent_of_disease)[90045-187] 2.jar:na]在liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55)〜[liquibase-core-3.3.2.jar:na] at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor。 java:122)〜[liquibase-core-3.3.2.jar:na]
at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1227)〜[liquibase-core-3.3.2.jar:na ]
at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1210)〜[liquibase-core-3.3.2.jar:na]
at liquibase.changelog.ChangeSet.execute(ChangeSet.java :550)〜[liquibase-core-3.3.2.jar:na]
在liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:43)[liquibase-core-3.3.2.jar:na ]
在liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73)[liquibase-core-3.3 .jar:na] $ li
在liquibase.Liquibase.update(Liquibase.java:200)[liquibase-core-3.3.2.jar:na]
at liquibase.integration.spring.SpringLiquibase。执行更新(SpringLiquibase.java:353)[liquibase-core-3.3.2.jar:na]
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:317)[liquibase-core-3.3.2 .jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org。 springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory。 support.AbstractAutowireCapableB eanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)[弹簧豆-4.1.6.RELEASE.jar:4.1.6.RELEASE]在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject
(AbstractBeanFactory .java:303)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)[ spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)[spring-beans-4.1。 6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)[spring-beans-4.1.6.RELEASE.jar: 4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ab (org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)中的
)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE] [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)[spring-beans-4.1 .6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634)[spring-beans-4.1.6.RELEASE.jar :4.1.6.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE ]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119)
[弹簧豆-4.1.6.RELEASE.jar:4.1.6.RELEASE ]
。在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014)[弹簧豆-4.1.6.RELEASE.jar:4.1.6.RELEASE]
。在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans。 factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.BeanDefinitionValueResolver。 resolveInnerBean(BeanDefinitionValueResolver.java:299)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java: 129)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.Abstra ctAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1477)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory。的java:1222)[弹簧豆-4.1.6.RELEASE.jar:4.1.6.RELEASE]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537
)[弹簧-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)[spring-beans-4.1.6 .RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:303)[spring-beans-4.1.6.RELEASE.jar: 4.1.6.RELEASE]
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)[spring-beans-4.1 .6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)[spring-beans-4.1.6.RELEASE.jar :4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1120)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE ]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1044)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans。 factory.annotation.AutowiredAnnotationBeanPostProcessor $汽车wiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata。 java:88)[spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]

解决方法:

 < changeSet author =newbieid =1449941926339-4> 
< addPrimaryKey columnNames =disease_id,descent_descent_of_disease
constraintName =PRIMARY_DISEASE_DESCENTS
tableName =DISEASE_DESCENTS/>
< / changeSet>

< changeSet author =newbieid =1449941926339-5>
< addPrimaryKey columnNames =descent_of_disease
constraintName =PRIMARY_ENUM_DESCENT
tableName =ENUM_DESCENT/>
< / changeSet> b


$ b

使用两个外键创建表失败,出现重复键名错误

$ b $如果在创建表之后添加主键,liquibase将使用 ALTER TABLE ... ADD CONSTRAINT ... 。而且不能有多个具有相同名称的约束条件。所以H2报告一个错误。

您已找到解决方法。



也许另一种方法是将主键定义添加到create table语句中:

 < changeSet author =newbieid =1449941926339-1> 
< createTable tableName =ENUM_DESCENT>
< column name =descent_of_diseasetype =VARCHAR(255)>
< constraints nullable =false/>
< constraints primaryKey =true/>
< / column>
< / createTable>
< / changeSet>

然后主键定义将在 CREATE TABLE ...中处理语句。



(顺便说一句:这在​​mySQL上不会发生,因为mySQL可以在<$ c上使用 PRIMARY KEY $ c> ALTER TABLE ... statement。因此,使用mySQL数据库,liquibase会将 addPrimaryKey changeset转换为 ALTER TABLE ... ADD PRIMARY KEY ...


At start problem is only with H2 database. On other database (MySQL) it works just fine without problems.

Configuration generated by (jHipster):

profile: dev

spring:
profiles:
    active: dev
datasource:
    dataSourceClassName: com.mysql.jdbc.jdbc2.optional.MysqlDataSource
    url: jdbc:mysql://******.net.net:3306/*****_pandemicd?autoReconnect=true
    databaseName: ****************
    serverName: ******.net
    username: ****************
    password: ****************
    cachePrepStmts: true
    prepStmtCacheSize: 250
    prepStmtCacheSqlLimit: 2048
    useServerPrepStmts: true

jpa:
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: MYSQL
    openInView: true
    show_sql: true
    generate-ddl: false
    hibernate:
        ddl-auto: none
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
    properties:
        hibernate.cache.use_second_level_cache: true
        hibernate.cache.use_query_cache: false
        hibernate.generate_statistics: true
        hibernate.cache.region.factory_class: pl.sedzisz.pandemic.config.hazelcast.HazelcastCacheRegionFactory
        hibernate.cache.use_minimal_puts: true
        hibernate.cache.hazelcast.use_lite_member: true

profile: test (in memory)

spring:
datasource:
    dataSourceClassName: org.h2.jdbcx.JdbcDataSource
    url: jdbc:h2:mem:pandemic;DB_CLOSE_DELAY=-1;MODE=MySQL;TRACE_LEVEL_FILE=4
    databaseName:
    serverName:
    username:
    password:

jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    database: H2
    openInView: true
    show_sql: true
    generate-ddl: false
    hibernate:
        ddl-auto: none
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
    properties:
        hibernate.cache.use_second_level_cache: false
        hibernate.cache.use_query_cache: false
        hibernate.generate_statistics: false
        hibernate.hbm2ddl.auto: validate

Now Liquibase changelog:

<changeSet author="newbie" id="1449941926339-1">
    <createTable tableName="ENUM_DESCENT">
        <column name="descent_of_disease" type="VARCHAR(255)">
            <constraints nullable="false"/>
        </column>
    </createTable>
</changeSet>

<changeSet author="newbie" id="1449941926339-2">
    <loadData encoding="UTF-8"
              file="config/liquibase/descent_of_disease.csv"
              separator=";"
              tableName="ENUM_DESCENT"/>
</changeSet>

<changeSet author="newbie" id="1449941926339-3">
    <createTable tableName="DISEASE_DESCENTS">
        <column name="disease_id" type="BIGINT">
            <constraints nullable="false"/>
        </column>
        <column name="descent_descent_of_disease" type="VARCHAR(255)">
            <constraints nullable="false"/>
        </column>
    </createTable>
</changeSet>

<changeSet author="newbie" id="1449941926339-4">
    <addPrimaryKey columnNames="disease_id, descent_descent_of_disease"
                   constraintName="PRIMARY"
                   tableName="DISEASE_DESCENTS"/>
</changeSet>

<changeSet author="newbie" id="1449941926339-5">
    <addPrimaryKey columnNames="descent_of_disease"
                   constraintName="PRIMARY"
                   tableName="ENUM_DESCENT"/>
</changeSet>

And sample of log:

 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Executing EXECUTE database command: ALTER TABLE PUBLIC.DISEASE_DESCENTS ADD CONSTRAINT "PRIMARY" PRIMARY KEY (disease_id, descent_descent_of_disease)
 [INFO] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Primary key added to DISEASE_DESCENTS (disease_id, descent_descent_of_disease)
 [INFO] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: ChangeSet config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie ran successfully in 1ms
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Computed checksum for addPrimaryKey:[
columnNames="disease_id, descent_descent_of_disease"
constraintName="PRIMARY"
tableName="DISEASE_DESCENTS"
 ] as eb8eba06bfcf2a30a029b8e49ea7d549
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Computed checksum for 7:eb8eba06bfcf2a30a029b8e49ea7d549: as 212a7c01d41bbcb1f9772a2d93161529
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Executing EXECUTE database command: INSERT INTO PUBLIC.DATABASECHANGELOG (ID, AUTHOR, FILENAME, DATEEXECUTED, ORDEREXECUTED, MD5SUM, DESCRIPTION, COMMENTS, EXECTYPE, LIQUIBASE) VALUES ('1449941926339-4', 'newbie', 'config/liquibase/changelog/20151115220815_added_entity_Descent.xml', NOW(), 6, '7:212a7c01d41bbcb1f9772a2d93161529', 'addPrimaryKey', '', 'EXECUTED', '3.3.2')
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Computed checksum for addPrimaryKey:[
columnNames="disease_id, descent_descent_of_disease"
constraintName="PRIMARY"
tableName="DISEASE_DESCENTS"
 ] as eb8eba06bfcf2a30a029b8e49ea7d549
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-4::newbie: Computed checksum for 7:eb8eba06bfcf2a30a029b8e49ea7d549: as 212a7c01d41bbcb1f9772a2d93161529
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Running Changeset:config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Changeset config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Reading ChangeSet: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Executing Statement: liquibase.statement.core.AddPrimaryKeyStatement@7334b84d
 [DEBUG] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Executing EXECUTE database command: ALTER TABLE PUBLIC.ENUM_DESCENT ADD CONSTRAINT "PRIMARY" PRIMARY KEY (descent_of_disease)
 [ERROR] liquibase - classpath:config/liquibase/master.xml: config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie: Change Set config/liquibase/changelog/20151115220815_added_entity_Descent.xml::1449941926339-5::newbie failed.  Error: org.h2.jdbc.JdbcSQLException: Ograniczenie "PRIMARY" już istnieje
 Constraint "PRIMARY" already exists; SQL statement: ALTER TABLE PUBLIC.ENUM_DESCENT ADD CONSTRAINT "PRIMARY" PRIMARY KEY (descent_of_disease) [90045-187]
 liquibase.exception.DatabaseException: org.h2.jdbc.JdbcSQLException: Ograniczenie "PRIMARY" już istnieje
 Constraint "PRIMARY" already exists; SQL statement: ALTER TABLE PUBLIC.ENUM_DESCENT ADD CONSTRAINT "PRIMARY" PRIMARY KEY (descent_of_disease) [90045-187] at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:316) ~[liquibase-core-3.3.2.jar:na] at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:55) ~[liquibase-core-3.3.2.jar:na] at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:122) ~[liquibase-core-3.3.2.jar:na]
at liquibase.database.AbstractJdbcDatabase.execute(AbstractJdbcDatabase.java:1227) ~[liquibase-core-3.3.2.jar:na]
at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1210) ~[liquibase-core-3.3.2.jar:na]
at liquibase.changelog.ChangeSet.execute(ChangeSet.java:550) ~[liquibase-core-3.3.2.jar:na]
at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:43) [liquibase-core-3.3.2.jar:na]
at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:73) [liquibase-core-3.3.2.jar:na]
at liquibase.Liquibase.update(Liquibase.java:200) [liquibase-core-3.3.2.jar:na]
at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:353) [liquibase-core-3.3.2.jar:na]
at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:317) [liquibase-core-3.3.2.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:634) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:444) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1119) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1014) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1477) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1222) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1120) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1044) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) [spring-beans-4.1.6.RELEASE.jar:4.1.6.RELEASE]

Workaround:

<changeSet author="newbie" id="1449941926339-4">
    <addPrimaryKey columnNames="disease_id, descent_descent_of_disease"
                   constraintName="PRIMARY_DISEASE_DESCENTS"
                   tableName="DISEASE_DESCENTS"/>
</changeSet>

<changeSet author="newbie" id="1449941926339-5">
    <addPrimaryKey columnNames="descent_of_disease"
                   constraintName="PRIMARY_ENUM_DESCENT"
                   tableName="ENUM_DESCENT"/>
</changeSet>

MySQL: Creating table with two foreign keys fails with "Duplicate key name" error

解决方案

If you add the primary keys after the table creation liquibase will use an ALTER TABLE... ADD CONSTRAINT.... And you can not have multiple constraints with the same name. So H2 reports an error.

You have already found a workaround.

Maybe another way would be to add your primary key definitions to the create table statement:

<changeSet author="newbie" id="1449941926339-1">
    <createTable tableName="ENUM_DESCENT">
        <column name="descent_of_disease" type="VARCHAR(255)">
            <constraints nullable="false"/>
            <constraints primaryKey="true"/>
        </column>
    </createTable>
</changeSet>

Then the primary key definition will be handled in the CREATE TABLE... statement.

(BTW: This does not happen on mySQL because mySQL is able to use PRIMARY KEY on the ALTER TABLE... statement. So with a mySQL DB liquibase will translate your addPrimaryKey changeset to something like ALTER TABLE... ADD PRIMARY KEY...)

这篇关于Liquibase主键在H2上创建两次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆