Я использую 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>
Обе записи правильно вставлен, за исключением значение внешнего ключа в таблице 2. Это значение остается равным нулю. Таким образом, кажется, что атрибут «computeValue» выполнен неправильно, но я не понимаю, почему. Я хотел бы иметь решение в Liquibase, а не в простом SQL, поскольку Liquibase предлагает мне возможность также легко вставлять поля clob.
TABLE1: ID - 5522839049923041049862979858500642751, ИМЯ - значение
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'. Это может дать вам понять, что он пытается сделать. –