我有两个表声明如下:Liquibase - 插入行以uuid
<changeSet author="istvan" id="country-table-changelog">
<createTable tableName="country">
<column name="id" type="uuid">
<constraints nullable="false" unique="true" />
</column>
<column name="name" type="varchar">
<constraints nullable="false" unique="true" />
</column>
</createTable>
</changeSet>
<changeSet author="istvan" id="region-table-changelog">
<createTable tableName="region">
<column name="id" type="uuid" >
<constraints nullable="false" unique="true" />
</column>
<column name="country_id" type="uuid">
<constraints nullable="false" />
</column>
<column name="name" type="varchar">
<constraints nullable="false" unique="true" />
</column>
</createTable>
</changeSet>
<changeSet author="istvan" id="region-country-foreign-key-constraint">
<addForeignKeyConstraint
baseTableName="region"
baseColumnNames="country_id"
referencedTableName="country"
referencedColumnNames="id"
constraintName="fk_region_country"
onDelete="CASCADE"
onUpdate="RESTRICT"/>
</changeSet>
我想填补liquibase changelog文件这两个表中包含一些值:
INSERT INTO country VALUES('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'HUNGARY');
INSERT INTO region VALUES('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'Baranya');
在这个例子中我仅仅因为简单就使用了aaaa和bbbb。我想通过DBMS生成这些UUID。
这样做的最佳方法是什么?我必须在我的更改日志文件中使用SQL,还是使用XML?我更喜欢像XML或JSON这样的DBMS独立解决方案。
我的第二个问题是,我怎么能与声明UUID创建在插入的UUID列。例如:
<column name="id" type="uuid" value="??? GENERATE UUID ???">
<constraints nullable="false" unique="true" />
</column>
谢谢你的时间!
第一部分工作。它用'919d39e4-2387-4926-91d5-595ebe0eea07'的id来插入匈牙利。但是,对于第二次插入,它给出以下例外:'错误:插入或更新表“区域”违反了外键约束“fk_region_country”键(country_id)=(34e4e0d8-91d8-4d52-99ae-ec42d6b0e66e)不存在于表“国家”。使用外键很明显,但我不知道如何在liquibase中使用它。下面是代码使用:\t '<列名= “COUNTRY_ID” 类型= “$ {uuid_type}” defaultValueComputed = “$ {uuid_function}”> \t \t \t <约束可为空= “假”/> \t \t \t Thx –
@FarkasIstván - 我收到了同样的错误。希望我能很快找到答案,但在此期间,如果你知道了,请告诉我。 – degreesightdc