Ich verwende hibernate4 hbm2ddl, um zu überprüfen, ob ein MySQL-Schema aktuell ist. Es sagt mir, Tabelle Bedarf geändert:liquibase - Wie ändert man die Tabelle, um eine bestehende Einschränkung eindeutig zu machen?
alter table ems.FooMetaData
drop constraint UK_jbjctqk7dys3q0xr5brfsdjvv
alter table ems.FooMetaData
add constraint UK_jbjctqk7dys3q0xr5brfsdjvv unique (metaDataId)
Die Tabelle sieht wie folgt in MySQL war:
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 |
Es ist wie diese erstellt wurde Liquibase (Version 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>
Wie aktualisiere ich Constraint mit einem eindeutigen (metaDataId)?
Ich versuchte, diese Einschränkung in Hbm2ddl in Liquibase löschen und mit referencesUniqueColumn="true"
hinzufügen, aber sieht gleich aus.
Ich bin nicht sicher, zu tun, wenn ich verstehe, was du fragst - aber 2 Dinge, die du beachten solltest: Lass liquibase mit 'updateSQL' anstelle von' update' laufen. Es erzeugt die SQL-Anweisungen, anstatt sie direkt in der Datenbank auszuführen. Auf diese Weise können Sie überprüfen, was Liquibase wirklich erzeugt. Die zweite Sache ist: Ich benutze auch Liquibase und Hibernate und die Constraint-Namen sehen aus wie Hibernate generiert. Sind Sie sicher, dass Ihr Tisch wirklich von liquibase generiert wurde? – Jens