How to migrate join table to entity table with liquibase without liquibase.exception.DatabaseException: ERROR: column "id" contains null values
How to migrate join table to entity table with liquibase without liquibase.exception.DatabaseException: ERROR: column "id" contains null values
我正在对 table 进行升级,该 table 以前只是连接 table 到真实实体。所以,它应该没有它加入的实体ids的主键,并建立自己的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
”。将其移动到同一变更集的不同位置并稍后执行后,迁移成功。最终的变更集看起来像,请注意单独的 addNotNullConstraint
和 primaryKey
-仅 <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>
我正在对 table 进行升级,该 table 以前只是连接 table 到真实实体。所以,它应该没有它加入的实体ids的主键,并建立自己的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
”。将其移动到同一变更集的不同位置并稍后执行后,迁移成功。最终的变更集看起来像,请注意单独的 addNotNullConstraint
和 primaryKey
-仅 <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>