Как перенести объединяемую таблицу в таблицу сущностей с liquibase без liquibase.exception.DatabaseException: ERROR: столбец «id» содержит нулевые значения - PullRequest
0 голосов
/ 01 мая 2020

Я делаю обновление таблицы, которая раньше была просто таблицей соединения, до реальной сущности. Таким образом, он не должен иметь первичного ключа идентификаторов сущностей, к которым он присоединяется, и устанавливает sh свой собственный идентификатор. Я попробовал это обновление конфигурации:

<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" содержит нулевые значения

1 Ответ

0 голосов
/ 01 мая 2020

Тем не менее, я понял, root проблема здесь заключается в форсировании "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>
...