我使用的是Liquibase插入到两行添加到数据库中,并通过外键将它们链接如下:插入通过Liquibase新纪录外键
<changeSet id="1.0.1" author="x">
<insert tableName="TABLE1">
<column name="NAME" value="a value"/>
</insert>
</changeSet>
<changeSet id="1.0.2" author="x">
<insert tableName="TABLE2">
<column name="FK" valueComputed="(SELECT ID FROM TABLE1 WHERE NAME = 'a value')"/>
</insert>
</changeSet>
两个记录插入正确的,除了TABLE2中外键的值。该值保持为空。所以看起来“computeValue”属性没有正确执行,但我不明白为什么。我想在Liquibase中有一个解决方案,而不是普通的SQL,因为Liquibase为我提供了可以轻松插入clob字段的可能性。
TABLE1: ID - 5522839049923041049862979858500642751, NAME - 一个值
TABLE2: ID - 4246034635279239656888789950125407204, FK - (空)
这是表结构:
<changeSet id="1.0.0" author="x">
<createTable tableName="TABLE1">
<column name="ID" type="NUMBER (38)">
<constraints primaryKey="true"/>
</column>
<column name="NAME" type="NUMBER (38)">
<constraints nullable="false"/>
</column>
</createTable>
<addUniqueConstraint columnNames="NAME"
constraintName="TABLE1_UK1"
tableName="TABLE1"/>
<createTable tableName="TABLE2">
<column name="ID" type="NUMBER (38)">
<constraints primaryKey="true"/>
</column>
<column name="FK" type="NUMBER (38)">
<constraints nullable="true"/>
</column>
</createTable>
<addForeignKeyConstraint baseColumnNames="FK"
baseTableName="TABLE2"
constraintName="TABLE2_TABLE1_FK1"
referencedColumnNames="ID"
referencedTableName="TABLE1"/>
</changeSet>
请注意,在插入新记录时,使用触发器为名为ID的字段生成标识符(主键)两张桌子。
这将是值得Liquibase显示生成的SQL,'updateSql'参数。这可能会让你知道它试图做什么。 –