2015-09-25 4 views
2

Я использую 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 при вставке новых записей в один из две таблицы.

+0

Было бы полезно, чтобы Liquibase отображал сгенерированный SQL с параметром 'updateSql'. Это может дать вам понять, что он пытается сделать. –

ответ

0

Возможно, вы могли бы использовать предопределенные значения для первичного ключа и внешнего ключа?

+0

Да, это именно то, что я сейчас использую как альтернативу. Но это не предпочтительное решение. – Christophe

Смежные вопросы