Доброго дня!
При миграции приложения с CUBA 7.2.20 на JMIX 1.6.2 возникает ошибка:
liquibase.exception.DatabaseException: The index 'IDX_BPROC_CONTENT_STORAGE_AUTHOR' is dependent on column 'AUTHOR_ID'. [Failed SQL: (5074) ALTER TABLE BPROC_CONTENT_STORAGE DROP COLUMN AUTHOR_ID]
полный стэктрейс
Running Changeset: com/haulmont/cuba/liquibase/changelog/003-migrate-ui-data.xml::50::migrator
2025-01-22 10:42:35.502 INFO 22152 --- [ main] liquibase.changelog : Data updated in UI_TABLE_PRESENTATION
2025-01-22 10:42:35.503 INFO 22152 --- [ main] liquibase.changelog : ChangeSet com/haulmont/cuba/liquibase/changelog/003-migrate-ui-data.xml::50::migrator ran successfully in 4ms
Running Changeset: com/haulmont/cuba/liquibase/changelog/004-migrate-bpm.xml::10::migrator
2025-01-22 10:42:35.536 INFO 22152 --- [ main] liquibase.changelog : Column BPROC_CONTENT_STORAGE.CREATE_TS renamed to CREATED_DATE
2025-01-22 10:42:35.538 INFO 22152 --- [ main] liquibase.changelog : Column BPROC_CONTENT_STORAGE.UPDATE_TS renamed to LAST_MODIFIED_DATE
2025-01-22 10:42:35.541 INFO 22152 --- [ main] liquibase.changelog : Column BPROC_CONTENT_STORAGE.UPDATED_BY renamed to LAST_MODIFIED_BY
2025-01-22 10:42:35.544 INFO 22152 --- [ main] liquibase.changelog : Column BPROC_CONTENT_STORAGE.DELETE_TS renamed to DELETED_DATE
2025-01-22 10:42:35.547 INFO 22152 --- [ main] liquibase.changelog : Columns AUTHOR_NAME(varchar(255)) added to BPROC_CONTENT_STORAGE
2025-01-22 10:42:35.551 INFO 22152 --- [ main] liquibase.changelog : Data updated in BPROC_CONTENT_STORAGE
2025-01-22 10:42:35.575 INFO 22152 --- [ main] liquibase.lockservice : Successfully released change log lock
2025-01-22 10:42:35.579 WARN 22152 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmix_Liquibase' defined in class path resource [io/jmix/autoconfigure/data/JmixLiquibaseAutoConfiguration.class]: Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for change set com/haulmont/cuba/liquibase/changelog/004-migrate-bpm.xml::10::migrator:
Reason: liquibase.exception.DatabaseException: The index 'IDX_BPROC_CONTENT_STORAGE_AUTHOR' is dependent on column 'AUTHOR_ID'. [Failed SQL: (5074) ALTER TABLE BPROC_CONTENT_STORAGE DROP COLUMN AUTHOR_ID]
Из полного стэктрейса видно, что ошибка возникает в ченджлоге 004-migrate-bpm.xml
в ченджсете 10
, в котором выполняются некоторые действия с таблицей , в том числе удаление столбца <dropColumn tableName="BPROC_CONTENT_STORAGE" columnName="AUTHOR_ID"/>
, который является внешним ключом, вызывающее ошибку.
содержимое ченджсета 004-migrate-bpm.xml::10
<changeSet id="10" author="migrator">
<validCheckSum>1:any</validCheckSum>
<preConditions onFail="MARK_RAN">
<tableExists tableName="BPROC_CONTENT_STORAGE"/>
</preConditions>
<renameColumn tableName="BPROC_CONTENT_STORAGE" oldColumnName="CREATE_TS" newColumnName="CREATED_DATE" columnDataType="datetime"/>
<renameColumn tableName="BPROC_CONTENT_STORAGE" oldColumnName="UPDATE_TS" newColumnName="LAST_MODIFIED_DATE" columnDataType="datetime"/>
<renameColumn tableName="BPROC_CONTENT_STORAGE" oldColumnName="UPDATED_BY" newColumnName="LAST_MODIFIED_BY" columnDataType="varchar(255)"/>
<renameColumn tableName="BPROC_CONTENT_STORAGE" oldColumnName="DELETE_TS" newColumnName="DELETED_DATE" columnDataType="datetime"/>
<addColumn tableName="BPROC_CONTENT_STORAGE">
<column name="AUTHOR_NAME" type="varchar(255)"/>
</addColumn>
<update tableName="BPROC_CONTENT_STORAGE">
<column name="AUTHOR_NAME" valueComputed="(select u.USERNAME from SEC_USER u where u.ID = AUTHOR_ID)"/>
</update>
<dropColumn tableName="BPROC_CONTENT_STORAGE" columnName="AUTHOR_ID"/>
<renameColumn tableName="BPROC_CONTENT_STORAGE" oldColumnName="AUTHOR_NAME" newColumnName="AUTHOR_ID" columnDataType="varchar(255)"/>
<renameTable oldTableName="BPROC_CONTENT_STORAGE" newTableName="BPM_CONTENT_STORAGE"/>
</changeSet>
схема бд перед миграцией
В ченджлоге 004-migrate-bpm.xml
присутствует ченджсет 5
, в котором удаляются ограничения внешних ключей с некоторых столбцов, включая ограничение, которое не дает удалить столбец BPROC_CONTENT_STORAGE.AUTHOR_ID
. Но этот ченджсет не выполняется для mssql, т.к. для него установлено условие выполнения для определенных СУБД:
<changeSet id="5" author="migrator" dbms="mysql, mariadb">
содержимое ченджсета 004-migrate-bpm.xml::5
<changeSet id="5" author="migrator" dbms="mysql, mariadb">
<validCheckSum>1:any</validCheckSum>
<preConditions onFail="MARK_RAN">
<tableExists tableName="BPROC_CONTENT_STORAGE"/>
</preConditions>
<dropForeignKeyConstraint baseTableName="BPROC_CONTENT_STORAGE" constraintName="FK_BPROC_CONTENT_STORAGE_AUTHOR"/>
<dropForeignKeyConstraint baseTableName="BPROC_USER_GROUP_ROLE" constraintName="FK_BPROC_USER_GROUP_ROLE_SEC_ROLE"/>
<dropForeignKeyConstraint baseTableName="BPROC_USER_GROUP_USER_LINK" constraintName="FK_USEGROUSE_USER"/>
<dropForeignKeyConstraint baseTableName="BPROC_USER_GROUP_USER_LINK" constraintName="FK_USEGROUSE_USER_GROUP"/>
</changeSet>
Если для MSSQL воспроизвести самостоятельно действия ченджсета 004-migrate-bpm.xml::5
- т.е. вручную удалить ограничения (и индексы), то остальные ченджсеты этого ченджлога выполняются успешно.
Обстановка
CUBA-проект:
CUBA Platform version: 7.2.20
CUBA Studio plugin version: 15.11-243
IntelliJ version: IntelliJ IDEA 2024.3.2 (Community Edition)
bproc-global:1.2.1
JMIX-проект:
Jmix version: 1.6.2
Jmix Studio plugin version: 2.4.2-243
IntelliJ version: IntelliJ IDEA 2024.3.2 (Community Edition)