Grails 2.4.4 DataSource "create-drop" 无法删除所有具有 FK 的表

Grails 2.4.4 DataSource "create-drop" fails to drop all tables having FKs

使用 Grails 2.4.4,并从 2.2.0 移植了我的域 classes。

我在 w.r.t "create-drop" 配置数据源时遇到问题,使用 MySQL 作为数据源。

每当我发出 grails stop-app 命令时,在总共 35 个 table 中,架构中剩下 22 个 table。

为 Hibernate classes 启用调试模式后,在停止应用进程结束时,它为所有 35 个 tables 生成 drop table if exists <tablename>,但没有 error/confirmation 日志中是否存在删除 table 是否成功。

剩下的 table 有 FK 关联,需要按特定顺序删除它们。使用相同的域 class 结构,我在使用早期 (2.2.0) 版本的 grails 时从未遇到过这个问题。

现在,我每次都在 运行-app 之前手动删除创建,因为它会导致 BootStrap 数据出现问题。

任何调试此问题的指针或何时会发生这种情况的用例,都将不胜感激。

对于我的案例,将 MySQL (v5.5.25) 的 FK-checks 设置为 0 解决了这个问题,尽管我不完全确定我是否应该 SET FOREIGN_KEY_CHECKS=0

如果有人有更好的解决方案,请分享。

编辑

由于 this 而遇到问题。经验教训 - 你不能盲目地复制粘贴随机代码 ~:-/

回答

谢谢伯特。

如果 DB 表现不稳定 w.r.t ddl 操作。始终检查 grails schema-report 生成的 ddl.sql,理想情况下应具有以下结构

alter table <Table> drop constraint <Constraint>
...

drop table if exists <Table>
...

create table <Table>(...)
...

create index <Index> ...   --(if any)
...

alter table <Table> add constraint <Constraint>
....