Ошибка Liquibase при добавлении внешних ключей

Я использую Jhipster и разрабатываю SpringBoot и AngularJS. Jhipster использует Liquibase для создания таблицы, загрузки данных, обновления и т. Д.

Я использую базу данных Mysql.

создание таблицы Studio

    <changeSet id="00000000000002" author="Mehbub"> <createTable tableName="studioname"> 
<column name="studioname_id" type="bigint" autoIncrement="${autoIncrement}"> 
<constraints primaryKey="true" nullable="false"/>
 </column>
 <column name="studioname_name" type="varchar(50)"> 
<constraints unique="true" nullable="false" />
 </column> </createTable>
 </changeSet>

создание таблицы CategoryStudio

<changeSet id="00000000000002" author="admin">
        <createTable tableName="categorystudio">
            <column name="categorystudio_id" type="bigint" autoIncrement="${autoIncrement}">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="categorystudio_title" type="varchar(50)">
                <constraints unique="true" nullable="false" />
            </column>

            <column name="studio_id" type="bigint">
                <constraints nullable="false" />
            </column>

        </createTable> </<changeSet>

Ограничения:

<changeSet id="00000000000002-1" author="Mehbub">
        <addForeignKeyConstraint baseColumnNames="studio_id"
                                 baseTableName="categorystudio"
                                 constraintName="fk_studioname_id"
                                 referencedColumnNames="studioname_id"
                                 referencedTableName="studioname"
                                 deleteCascade="true"
                                 onDelete="CASCADE"/>
    </changeSet>

Создание еще одной таблицы "tvshow"

<changeSet id="00" author="Mehbub">
    <createTable tableName="tvshow">
        <column name="tvshow_id" type="bigint" autoIncrement="${autoIncrement}">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="tvshow_name" type="varchar(50)">
            <constraints unique="true" nullable="false" />
        </column>
        <column name="movieCategory_id" type="bigint">
            <constraints nullable="false" />
        </column>

        <column name="genreCategory_id" type="bigint">
            <constraints nullable="false" />
        </column>
    </createTable>
</changeSet>

Ограничения:

    <addForeignKeyConstraint baseColumnNames="movieCategory_id"
                             baseTableName="tvshow"
                             constraintName="fk_tvshow_movieCategory_id"
                             referencedColumnNames="categorystudio_id"
                             referencedTableName="categorystudio"
                             deleteCascade="true"
                             onDelete="CASCADE"/>

    <addForeignKeyConstraint baseColumnNames="genreCategory_id"
                             baseTableName="tvshow"
                             constraintName="fk_tvshow_genreCategory_id"
                             referencedColumnNames="genresCategory_id"
                             referencedTableName="genresCategory"
                             deleteCascade="true"
                             onDelete="CASCADE"/>
</changeSet>

another table: genresCategory

<changeSet id="00" author="admin">
    <createTable tableName="genresCategory">
        <column name="genresCategory_id" type="bigint" autoIncrement="${autoIncrement}">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="genresCategory_name" type="varchar(50)">
            <constraints unique="true" nullable="false" />
        </column>

    </createTable>
</changeSet>

Если я добавляю только один внешний ключ, он работает нормально, но когда я добавляю второй внешний ключ, возникает ошибка, указанная ниже.

Мое уравнение таково: в каждой категории много телешоу, а в каждом телешоу много жанров.

я получаю сообщение об ошибке:

liquibase.exception.MigrationFailedException: Migration failed for change set config/liquibase/changelog/00_constraints_tvShow.xml::00::Mehbub:
     Reason: liquibase.exception.DatabaseException: Can't create table `allcomiclibrary`.`#sql-2ad_3ac` (errno: 150 "Foreign key constraint is incorrectly formed") [Failed SQL: ALTER TABLE allComicLibrary.tvshow ADD CONSTRAINT fk_tvshow_genreCategory_id FOREIGN KEY (genreCategory_id) REFERENCES allComicLibrary.genresCategory (genresCategory_id) ON DELETE CASCADE]   at liquibase.changelog.ChangeSet.execute(ChangeSet.java:619)    at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51)   at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:79)     at liquibase.Liquibase.update(Liquibase.java:214)   at liquibase.Liquibase.update(Liquibase.java:192)   at liquibase.integration.spring.SpringLiquibase.performUpdate(SpringLiquibase.java:431)     at liquibase.integration.spring.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:388)    at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.initDb(AsyncSpringLiquibase.java:103)   at io.github.jhipster.config.liquibase.AsyncSpringLiquibase.lambda$afterPropertiesSet$0(AsyncSpringLiquibase.java:83)   at io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor.lambda$createWrappedRunnable$1(ExceptionHandlingAsyncTaskExecutor.java:68)   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)  at java.lang.Thread.run(Thread.java:748)

Не могли бы вы помочь мне понять, что я здесь делаю неправильно?


person user6250770    schedule 20.08.2018    source источник
comment
Как создается allcomiclibrary таблица?   -  person htshame    schedule 20.08.2018
comment
есть и другие таблицы .. которые были созданы, но остановились на этой ошибке выдачи таблицы   -  person user6250770    schedule 20.08.2018
comment
Что я делаю неправильно в этих ограничениях FK, которые вызывают ошибку ..?   -  person user6250770    schedule 20.08.2018
comment
Возможно, если вы предоставите полный код всех соответствующих наборов изменений, мы сможем вам помочь. Как указано в исключении, запрос SQL ALTER TABLE allComicLibrary.tvshow ADD CONSTRAINT fk_tvshow_genreCategory_id FOREIGN KEY (genreCategory_id) REFERENCES allComicLibrary.genresCategory (genresCategory_id) ON DELETE CASCADE завершается ошибкой.   -  person htshame    schedule 20.08.2018
comment
@htshame, это набор изменений studioName .. не могли бы вы мне помочь   -  person user6250770    schedule 20.08.2018
comment
Можете ли вы публиковать сообщения, в каком порядке у вас есть журналы изменений? Таблица genresCategory создана до внешнего ключа fk_tvshow_genreCategory_id?   -  person bilak    schedule 20.08.2018
comment
Привет, @bilak, я никогда не видел журналов изменений ... я переместил жанрыCategory наверх, а затем телешоу .. теперь это сработало :) .. спасибо за большую помощь   -  person user6250770    schedule 20.08.2018


Ответы (1)


Сначала я создавал db tvshow, а затем жанры .. так что это вызывало ошибку .. изменил последовательность журнала изменений и работал нормально

person user6250770    schedule 20.08.2018