liquibase - 如何更改 table 以使现有约束唯一?

liquibase - how to alter table to make a existing constraint unique?

我正在使用 hibernate4 hbm2ddl 检查 mysql 模式是否是最新的。它告诉我 table 需要更改 :

alter table ems.FooMetaData 
    drop constraint UK_jbjctqk7dys3q0xr5brfsdjvv
alter table ems.FooMetaData 
    add constraint UK_jbjctqk7dys3q0xr5brfsdjvv unique (metaDataId)

table 在 MySQL 中看起来像这样:

mysql> show create table FooMetaData;
| FooMetaData | CREATE TABLE `FooMetaData` (
  `fooMemberId` int(11) DEFAULT NULL,
  `metaDataId` varchar(255) DEFAULT NULL,
  KEY `FK948B6448448663FC` (`metaDataId`),
  KEY `FK948B64486FA1E99D` (`fooMemberId`),
  CONSTRAINT `FK948B6448448663FC` FOREIGN KEY (`metaDataId`) REFERENCES `BarValues` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK948B64486FA1E99D` FOREIGN KEY (`fooMemberId`) REFERENCES `Foos` (`fooMemberId`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

它是使用 Liquibase(版本 3.4.2)创建的

  <changeSet author="myauthor" id="myid">
          <addForeignKeyConstraint baseColumnNames="metaDataId" 
           baseTableName="FooMetaData" baseTableSchemaName="foo" constraintName="FK948B6448448663FC"                                                                     
           deferrable="false" initiallyDeferred="false" onDelete="NO ACTION" onUpdate="NO ACTION" 
            referencedColumnNames="id" referencedTableName="BarValues" 
            referencedTableSchemaName="foo" referencesUniqueColumn="false"/>
        </changeSet>

如何使用唯一 (metaDataId) 更新约束?

我尝试在 liquibase 的 hbm2ddl 中删除该约束并添加 referencesUniqueColumn="true" 但看起来一样。

这是一个XY problem;以防其他人走上与我相同的道路,这就是我学到的...

真正的根本原因是创建表(和约束)(使用 Liquibase)以符合使用旧版本休眠 (v3) 构建的应用程序。

我们将应用程序升级到 hibernate4,其 hbm2ddl 测试抱怨应用程序注释中的一些约束与真实数据库不同。

根据 hbm2ddl 错误消息,我认为是 unique 后缀导致了问题,然而,只是 需要更改约束名称 删除约束并重新添加它,除了所需的约束名称之外。

所以我取得了进步,但在 liquibase ....

    <dropForeignKeyConstraint baseTableName="FooMetaData" constraintName="FK948B6448448663FC"/>

 <addForeignKeyConstraint 
  // SNIP        
    constraintName="UK_jbjctqk7dys3q0xr5brfsdjvv"
 // SNIP same attributes as original addForeignKeyConstraint 

而且我不需要更改与唯一 (metaDataId) 有关的任何内容