2015-09-25 77 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> 

两个记录插入正确的,除了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的字段生成标识符(主键)两张桌子。

+0

这将是值得Liquibase显示生成的SQL,'updateSql'参数。这可能会让你知道它试图做什么。 –

回答

0

也许你可以使用主键和外键的预定义值?

+0

是的,这正是我现在正在使用的替代方案。但这不是首选解决方案。 – Christophe