添加外键时出现 Liquibase 错误
Liquibase error while adding foreign keys
我正在使用 Jhipster 并开发 SpringBoot 和 AngularJS。 Jhipster 正在使用 liquibase 创建 table、加载数据、更新 e.t.c
我正在使用 Mysql 数据库。
正在创建 table 工作室
<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 table
<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>
正在创建另一个 table“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>
另一个table:流派类别
<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>
如果我只添加一个外键,那么它可以工作 fine.But,当我添加第二个外键时,它会出现以下错误。
我的等式是,每个类别都有很多电视节目,每个电视节目都有很多流派
我得到的错误是:
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[=16=](AsyncSpringLiquibase.java:83) at io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor.lambda$createWrappedRunnable(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)
你能帮我看看我做错了什么吗?
我先创建了 db tvshow,然后创建了 genres.. 所以它遇到了错误.. 更改了更改日志顺序并且工作正常
我正在使用 Jhipster 并开发 SpringBoot 和 AngularJS。 Jhipster 正在使用 liquibase 创建 table、加载数据、更新 e.t.c
我正在使用 Mysql 数据库。
正在创建 table 工作室
<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 table
<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>
正在创建另一个 table“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>
另一个table:流派类别
<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>
如果我只添加一个外键,那么它可以工作 fine.But,当我添加第二个外键时,它会出现以下错误。
我的等式是,每个类别都有很多电视节目,每个电视节目都有很多流派
我得到的错误是:
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[=16=](AsyncSpringLiquibase.java:83) at io.github.jhipster.async.ExceptionHandlingAsyncTaskExecutor.lambda$createWrappedRunnable(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)
你能帮我看看我做错了什么吗?
我先创建了 db tvshow,然后创建了 genres.. 所以它遇到了错误.. 更改了更改日志顺序并且工作正常