如何将联接表迁移到具有 liquibase 的实体表,而不使用 liquibase。异常。数据库异常: 错误: 列 "id" 包含空值



我正在将以前只是连接表的表升级为实际实体。因此,它应该没有它加入的实体的id的主键,并建立自己的id。我尝试了这个更新配置:

<changeSet id="20200429180824-1" author="jhipster">
<dropPrimaryKey columnNames="teacher_id, subject_id" tableName="teacher_subject"/>
<addColumn tableName="teacher_subject" author="jhipster">
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="teacher_status" type="varchar(255)" defaultValue="APPROVED">
<constraints nullable="true" />
</column>
<column name="achieved" type="datetime" defaultValueComputed="CURRENT_TIMESTAMP" >
<constraints nullable="true" />
</column>
<column name="active" type="boolean" defaultValue="true">
<constraints nullable="true" />
</column>
<!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
</addColumn>
<dropDefaultValue tableName="teacher_subject" columnName="achieved" columnDataType="datetime"/>
</changeSet>

然而,在迁移时,我遇到了这个异常的失败,尽管我预计该列应该在此时创建并预先填充autoIncrement数据:

liquibase.exception.DatabaseException:错误:列"id"包含空值

然而,我已经意识到问题的根源在于强制执行"nullable=false"。在将其移动到不同的变更集并稍后执行相同的变更集之后,迁移成功。最后的变更集看起来像,注意单独的addNotNullConstraintprimaryKey——这里只有<constraints primaryKey="true"/>

<changeSet id="20200429180824-1" author="jhipster">
<dropPrimaryKey columnNames="teacher_id, subject_id" tableName="teacher_subject"/>
<addColumn tableName="teacher_subject" author="jhipster">
<column name="id" type="bigint" autoIncrement="true">
<constraints primaryKey="true"/>
</column>
<column name="teacher_status" type="varchar(255)" defaultValue="APPROVED">
<constraints nullable="true" />
</column>
<column name="achieved" type="datetime" defaultValueComputed="CURRENT_TIMESTAMP" >
<constraints nullable="true" />
</column>
<column name="active" type="boolean" defaultValue="true">
<constraints nullable="true" />
</column>
<!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
</addColumn>
<addNotNullConstraint catalogName="cat"
columnDataType="bigint"
columnName="id"
constraintName="teacher_subject_id_not_null"
tableName="teacher_subject"
validate="true"/>
<dropDefaultValue tableName="teacher_subject" columnName="achieved" columnDataType="datetime"/>
</changeSet>

最新更新